美文网首页
android中的事件总线

android中的事件总线

作者: 田野光 | 来源:发表于2016-03-01 19:00 被阅读733次

    资料整理:


    android常见的事件总线库

    EventBus in GitHub
    最新版本3.0.0

    AndroidEventBus
    最新版本1.0.4

    otto
    最新版本 1.3.8


    相关博客

    事件总线源码分析
    这篇文章从订阅/发布模型入手,介绍了EventBus和Otto两个事件总线框架,并从源码角度解析了EventBus(源码非最新)

    Android事件总线 ( AndroidEventBus ) 开源库发布
    任玉刚的博客,从android跨组间通信入手,介绍了自己的开源库AndroidEventBus,分析了greenrobot的EventBus的不足,并提出自己的改进方式。

    otto 源码分析
    Square公司的otto同样基于发布-订阅模式, 通过注解的形式将具体的方法作为订阅者和发布者。


    上面三篇博客分别主要介绍了目前android中三个最主要的事件总线库,这里我借用一张表格来简要展示下各种的优缺点(表格转自任玉刚,也就是AndroidEventBus的作者):

    名称 订阅函数是否可执行在其他线程 特点
    greenrobot的EventBus 使用name pattern模式,效率高,但使用不方便。
    square的otto 使用注解,使用方便,但效率比不了EventBus。
    AndroidEventBus 使用注解,使用方便,但效率比不上EventBus。订阅函数支持tag(类似广播接收器的Action)使得事件的投递更加准确,能适应更多使用场景。

    事件总线存在的优点想必大家都很清楚了,android自带的广播机制对于组件间的通信而言,使用非常繁琐,通信组件彼此之间的订阅和发布的耦合也比较严重,更重要的是对于事件的定义,广播机制局限于序列化的类(通过Intent传递),不够灵活。

    这里谈到的事件总线库,其实本质都是基于“事件总线框架”,这套框架采用的是“发布/订阅”模型。事件类 事件总线 发布者 订阅者 这四个核心角色是这一框架的基础,说白了,事件总线通过不同的调度策略,在已维护的“事件-发布者-订阅者”的集合中,将事件从发布者传递到订阅者当中。使用简单是因为,发布者和订阅者的注册,都由事件总线统筹管理。订阅函数由事件总线通过注解或者反射的方式自动维护和调用。 otto和AndroidEventBus采用的是注解,EventBus则是规定方法名基础上采用反射。

    从调度策略角度,EventBus定义了四种ThreadMode,通过订阅方法的名称来实现。otto的event bus模式事件调度的重要规则是事件调度仅在发送线程域中进行,通过线程控制策略ThreadEnforcer类实现不同的线程控制。同样的,AndroidEventBus同样定义了三种ThreadMode,与 greenrobot的EventBus定义的区别也仅是,前者采用注解,后者采用方法名标记。

    相关文章

      网友评论

          本文标题:android中的事件总线

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