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便会接收到该广播。那么粘性事件同理,在注册之前便把事件发生出去,等到注册之后便会收到最近发送的粘性事件(必须匹配)。注意:只会接收到最近发送的一次粘性事件,之前的会接受不到。(在注册后可以马上接受到离自己最近的一次事件)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 137,086评论 19 139
  • 前言 EventBus是greenrobot在Android平台发布的一款以订阅——发布模式为核心的开源库。Eve...
    丶蓝天白云梦阅读 24,403评论 18 76
  • 对于Android开发老司机来说肯定不会陌生,它是一个基于观察者模式的事件发布/订阅框架,开发者可以通过极少的代码...
    飞扬小米阅读 1,577评论 0 50
  • 我每周会写一篇源代码分析的文章,以后也可能会有其他主题.如果你喜欢我写的文章的话,欢迎关注我的新浪微博@达达达达s...
    SkyKai阅读 25,217评论 23 184
  • 我在南方的小城,湘潭。一个很小的三、四线小城,因沾了伟人故里的仙气,也曾名扬四海,而今逝者如斯,追思者渺。早日盛景...
    水静深流阅读 465评论 0 0

友情链接更多精彩内容