美文网首页
EventBus(3.0)使用总结

EventBus(3.0)使用总结

作者: 怎么快乐 | 来源:发表于2020-11-12 12:47 被阅读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使用注解的配置,发送和接受还按照原来的使用即可 !!!!!

    相关文章

      网友评论

          本文标题:EventBus(3.0)使用总结

          本文链接:https://www.haomeiwen.com/subject/regubktx.html