EventBus的介绍和正确使用,以及EventBus官方文档的坑

EventBus的介绍和正确使用,以及EventBus官方文档的坑_第1张图片
EventBus的介绍和正确使用,以及EventBus官方文档的坑_第2张图片

使用场景EventBus的介绍和正确使用,以及EventBus官方文档的坑_第3张图片
官方架构图

EventBus的介绍和正确使用,以及EventBus官方文档的坑_第4张图片

官方文档中这样配置:

第一步:导入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();
3、其他的步骤和用法同官方推荐的方法。但依然推荐在onCreate和onDestory中进行注册和注销。

你可能感兴趣的:(Android升华)