使用场景
官方架构图
官方文档中这样配置:
第一步:导入EventBus库
implementation 'org.greenrobot:eventbus:3.1.1'
第二步:在项目中初始化及使用
1、Define events:
public static class MessageEvent { /* Additional fields if needed */ }
2、注册和反注册
//订阅事件
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(MessageEvent event) {/* Do something */};
//Register and unregister your subscriber. For example on Android, activities and fragments should usually register according to their life cycle:
@Override
public void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}
@Override
public void onStop() {
super.onStop();
EventBus.getDefault().unregister(this);
}
3、Post events:
//发送事件(消息)
EventBus.getDefault().post(new MessageEvent());
4、简单介绍:
1、@Subscribe注解中加入:sticky = true,其作用是延时消费或页面未初始化。
2、如果订阅两个方法可以同时接收,先执行哪个方法呢?
priority数值越大,优先级越高。priority 默认是0
例如:@Subscribe(threadMode = ThreadMode.MAIN, priority = 10) > @Subscribe(threadMode = ThreadMode.MAIN, priority = 1);
然而,并没有收到消息
如果你遇到同样的问题,可以在onCreate()方法中注册:
EventBus.getDefault().register(this);
在onDestory()方法中进行注销
if(EventBus.getDefault().isRegistered(this)) {
EventBus.getDefault().unregister(this);
}
运行结果,收到消息了。 然而这依然不是完美的,因为它走的是反射,而不是注释处理器。
看过来,以下是注释处理器正确用法:
http://greenrobot.org/eventbus/documentation/subscriber-index/
1、Using annotationProcessor
android {
defaultConfig {
javaCompileOptions {
annotationProcessorOptions {
arguments = [ eventBusIndex : 'com.example.myapp.MyEventBusIndex' ]
}
}
}
}
dependencies {
implementation 'org.greenrobot:eventbus:3.1.1'
annotationProcessor 'org.greenrobot:eventbus-annotation-processor:3.1.1'
}
2、在Application中初始化
EventBus.builder().addIndex(new MyEventBusIndex()).installDefaultEventBus();