EventBus 3.0 小使用

本篇是基于 http://www.jianshu.com/p/acfe78296bb5 这篇文章。简单的总结下,加深记忆。(其实就是copy)

前言

EventBus是greenrobot在Android平台发布的一款以订阅——发布模式为核心的开源库。EventBus翻译过来是事件总线的意思,可以这样理解:一个个事件(event)发送到总线上,然后EventBus根据已注册的订阅者(subscribers)来匹配相应的事件,进而把事件传递给订阅者,这也是观察者模式的一个最佳实践。

那么EventBus可以用到什么地方呢?我们平时开发的时候,当遇到Activity与Activity、Activity与Fragment之间的通信,往往采用Intent,又或者线程之间使用Handler进行通信,这样代码难免会复杂许多,而使用EventBus能极大简化两个组件之间的通信问题,而且效率极高,而EventBus升级到3.0版本后,开发者能够自定义订阅方法的名字,而没必要规定以“onEventXX”开头的方法了,这样也自由化了很多,而且支持了粘性事件的分发等,因此学会使用EventBus3.0对我们的开发有极大的好处。

相比于EventBus 之前的版本。

  • 订阅者的订阅方法的名字可以随意,不用必须写OnEvent(...);
  • 必须要在订阅者的订阅方法上添加 @Subscribe(里面的内容后面有)次注解
  • 新的版本添加粘性事件的分发、订阅者的线程工作、优先级的问题。使用更给力

和之前一样 注册和销毁 没变

//注册成为订阅者
EventBus.getDefault().register(this);
 @Override
    protected void onDestroy() {
        super.onDestroy();
        //解除注册
        EventBus.getDefault().unregister(this);
    }
//订阅方法,当接收到事件的时候,会调用该方法
    @Subscribe(threadMode = ThreadMode.MAIN)
    public void onEvent(MessageEvent messageEvent){
    //这个OnEvent(...); 名字可以变化。但是必须加注解
    }

下面聊一下@Subscribe
里面有三个注解可以使用分别为:

  • ThreadMode 代表订阅方法所运行的线程
    • POSTING:表示订阅方法运行在发送事件的线程**(默认)
      **
    • MAIN:表示订阅方法运行在UI线程,由于UI线程不能阻塞,因此当使用MAIN的时候,订阅方法不应该耗时过长。
    • BACKGROUND:表示订阅方法运行在后台线程,如果发送的事件线程不是UI线程,那么就使用该线程;如果发送事件的线程是UI线程,那么新建一个后台线程来调用订阅方法。
    • ASYNC:订阅方法与发送事件始终不在同一个线程,即订阅方法始终会使用新的线程来运行。
  • sticky 代表是否是粘性事件
    设置该优先级的目的是,当一个事件有多个订阅者的时候,优先级高的会优先接收到事件。
  • priority 代表优先级

关于粘性事件,可以参考Android的广播机制,其中有一个粘性广播,粘性广播的意思是:该广播发送后,会保存在内存中,如果后来有注册的Receiver与之匹配,那么该Receiver便会接收到该广播。那么粘性事件同理,在注册之前便把事件发生出去,等到注册之后便会收到最近发送的粘性事件(必须匹配)。注意:只会接收到最近发送的一次粘性事件,之前的会接受不到。(在注册后可以马上接受到离自己最近的一次事件)

你可能感兴趣的:(EventBus 3.0 小使用)