EventBus github 地址
在Android Studio中添加如下依赖:
compile 'org.greenrobot:eventbus:3.1.1'
EventBus 的使用
- 创建事件实体类
当使用EventBus从一个组件向另外一个组件发送的信息,可以是储存在一个类中,该类就是一个事件,会被EventBus发送给订阅者。
public class MessageEvent {
private String message;
public MessageEvent(String message){
this.message = message;
}
public String getMessage(){
return message;
}
}
- 向EventBus注册,成为订阅者以及解除注册
EventBus.getDefault().register(this);
通过上面代码便可以为当前类注册,成为订阅者,一般在类初始化时注册,如果是Activity则在onCreate()方法中进行注册。
EventBus.getDefault().unregister(this);
当订阅者不再需要接受事件时候,需要解绑,释放内存。
- 声明订阅方法
@Subscribe(threadMode = ThreadMode.MAIN,priority = 100,sticky = true)
public void test(String str){
}
在需要接受方法上面设置@Subscribe
即可,
threadMode 表示在那个线程执行此方法,
priority 表示执行的优先级,
sticky 表示是否粘性。
需要注意的是本方法必须为public,并且参数必须为一个,这个我们在后面源码分析中会解释。
- .发送事件
EventBus.getDefault().post(EventType eventType);
与观察者模式类似,当有事件发生时,需要通知观察者。这个方法就是通知观察者的方法,EventBus在底层进行了封装。
ThreadMode分析
POSTING:表示在发送事件的线程执行方法。
MAIN: 表示在主线程执行方法。
BACKGROUND:表示在子线程执行方法。
ASYNC:表示在非当前线程执行方法,会重新创建一个新的线程执行方法。
priority 优先级
设置该优先级的目的是,当一个事件有多个订阅者的时候,优先级高的会优先接收到事件。
sticky 粘性事件
在注册之前便把事件发生出去,等到注册之后便会收到最近发送的粘性事件(必须匹配)。注意:只会接收到最近发送的一次粘性事件,之前的会接受不到。
总结
至此EventBus的使用方式就讲到这里,下面看EventBus的源码解析。