EventBus的定义
主要功能是用来替代传统的Intent、Handler、Broadcast在Fragment、Activity、Service以及线程之间传递消息。
它的优点
解耦和简化Activities, Fragments等组件以及后台线程之间的通信,分离事件发送方和接收方
使得代码更简洁,避免出现复杂的依赖性和生命周期问题
体积小(大概只有50k 的 jar包)
如何使用
添加依赖
dependencies {
implementation ‘org.greenrobot:eventbus:3.1.1’
}
在需要的地方注册事件
EventBus.getDefault().register(this);
在ondestroy中解注册
EventBus.getDefault().unregister(this);
还需要自定义一个事件类型 例如
public class MessageEvent {
private String message;
public MessageEvent(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
传递String message数据
然后接受方可以通过注解方式来获取数据,例如
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(MessageEvent event) {
String title=event.getTitle();
int image=event.getImage();
String content=event.getContent();
}
其中有4种线程模式
ThreadMode.POSTING:
订阅者方法将在发布事件所在的线程中被调用。这是 默认的线程模式。事件的传递是同步的,一旦发布事件,所有该模式的订阅者方法都将被调用
ThreadMode.MAIN :发送方和接受方都在主线程工作
ThreadMode.BACKGROUND :如果发送方在主线程,则接受方在子线程,如果发送方在子线程,则接受方在发送方的子线程工作
ThreadMode.ASYNC:无论发送方在哪个线程,接受方都另开一个子线程工作
发送方通过
EventBus.getDefault().post(new MessageEvent(“Hello EventBus!”));
来发送事件传递数据