EventBus(3.0)使用总结

2020-11-12  本文已影响0人  怎么快乐

正常使用

implementation "org.greenrobot:eventbus:$eventbus_version"//引入依赖
public static class MessageEvent { /* Additional fields if needed */ } //定义消息
 @Override
 public void onStart() {
     super.onStart();
     EventBus.getDefault().register(this); //注册
 }

/**
* 在主线程接受消息
**/
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(MessageEvent event) {/* Do something */};

 @Override
 public void onStop() {
     super.onStop();
     EventBus.getDefault().unregister(this); //取消注册
 }
 EventBus.getDefault().post(new MessageEvent()); //发送消息

线程模式

四种模式分别是:POSTING、MAIN、BACKGROUND、ASYNC
设置方式:接受消息方法上的注解 添加threadMode = "线程模式",代码如下

@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(MessageEvent event) {/* Do something */};

POSTING:默认模式可以不写,只能在同一线程接受,既发送方在哪个线程接收方就在哪个线程
MAIN:无论发布者在哪个线程发送,接收方都在主线程中
BACKGROUND:无论发布者在哪个线程发送,接收方都在子线程中
ASYNC:无论发布者在哪个线程发送,接收方都在都会开辟另一个不同的线程接受消息

粘性广播

使用方式:接收方需要在接受消息方法上的注解 增加 sticky = true,代码如下

@Subscribe(threadMode = ThreadMode.MAIN, sticky = true)
public void onMessageEvent(MessageEvent event){/* Do something */}

接收方 使用 postSticky() 发送消息,代码如下

 EventBus.getDefault().postSticky(new MessageEvent());

设置接受的优先级

使用方式:接收方需要在接受消息方法上的注解 增加 priority = 10,优先级越高接受数据越快,当优先级不想分发事件给低级别的事件时,可以使用 cancelEventDelivery (Object event) 取消事件传递。
注意:只有在threadMode = ThreadMode.POSTING 时 cancelEventDelivery (Object event)方法才有效

@Subscribe(threadMode = ThreadMode.POSTING , priority = 100)
public void onMessageEvent(MessageEvent event){/* Do something */}

优化

上面介绍到的用法,相信大家都是这么写对吧,但是这种用法其实可以优化,因为这样使用EventBus,内部用到了反射机制(不信可以断点看一下EventBus的源码)。
那么怎么优化呢?其实就是使用EventBus的注解处理器,下面我就介绍一下怎么使用。
参考文档:https://greenrobot.org/eventbus/documentation/subscriber-index/

 annotationProcessor "org.greenrobot:eventbus-annotation-processor:$eventbus_version" //在gradle中增加
//在app下的gradle中配置
android {
    defaultConfig {
        javaCompileOptions {
            annotationProcessorOptions {
                arguments = [ eventBusIndex : 'com.example.myapp.MyEventBusIndex' ]
            }
        }
    }
}
在Application中配置
public class App extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        EventBus.builder().addIndex(new MyEventBusIndex()).installDefaultEventBus();
    }
}

以上三步就完成了EventBus使用注解的配置,发送和接受还按照原来的使用即可 !!!!!

上一篇下一篇

猜你喜欢

热点阅读