美文网首页Android
EventBus VS. Otto bus

EventBus VS. Otto bus

作者: raywalker | 来源:发表于2020-04-01 22:37 被阅读0次

EventBus 笔记

APP中模块/层级间交互的逻辑处理往往也起着关键性的作用,一般较为常见的是通过自定义的接口即回调( callback )的方式实现,但是逻辑稍微复杂的情况下很容易发展为callback hell。本篇我们要看的是另外的一种方式,即采用Event bus来解耦发送端与接收端。实质上看 EventBus 是设计模式中 Observer模式 的典型代表。

先看到主流的Event bus 的对比 (Greenrobot EventBus VS. Otto Bus):

0. 性能对比

先摘录官方的 Comparison 对比一览表

1. 对DeadEvent的处理

OttoBus 对没有接收者的事件,保留了和 Guava eventbus 相同处理方式,即发现没有处理事件的handler时将发出 DeadEvent,此时 DeadEvent 将事件的发送者和源事件包装起来了。

而 Greenrobot EventBus 中则附加定义了 postSticky 的方法,会在内存中缓存 ( Sticky Events map 默认以 Event class作为key保存 ) 最近的 Sticky Event 对象,在接收的方法中明确指定 stickytrue 时,则可以自动处理;但值得注意的是,此时如未指定stickytrue,则不能收到 event。同时在处理完了Sticky Event之后,需要手动移除,以避免重复处理该事件。

@Subscribe(sticky = true)
public void onHandle(YourEvent event) {
    // process your sticky event
    // ...
    EventBus.getDefault().removeStickyEvent(event);
}

相较之下,OttoBus 则可能需要自行搜集所有的DeadEvent,然后适时再次发送。

2. 事件处理的可继承性与订阅者索引

由于EventBus 对Event 以及 Subscriber 的继承性都进行了实现,简单来讲基类的订阅逻辑在子类中同样是有效的;而Otto bus则处于性能上的考虑未能给予支持。

再看 Greenrobot EventBus,为了优化性能,减少靠反射调用来查找事件的订阅方法,EventBus 推荐采用对订阅者建立索引, 最终利用 annotation processor 生成索引类,使用 builder 模式构建最后的 EventBus 实例(将复杂度从运行时转到了编译期 😁)。

⚠️如果项目中引入了 Kotlin 或是已经是完全的 Kotlin开发,请使用

apply plugin: 'kotlin-kapt' // ensure kapt plugin is applied

dependencies {
    def eventbus_version = '3.2.0'
    implementation "org.greenrobot:eventbus:$eventbus_version"
    kapt "org.greenrobot:eventbus-annotation-processor:$eventbus_version"
}

kapt {
    arguments {
        arg('eventBusIndex', 'com.example.myapp.MyEventBusIndex')
    }
}

而无需同时指定

javaCompileOptions {
      annotationProcessorOptions {
              arguments = [ eventBusIndex : 'com.example.myapp.MyEventBusIndex' ]
      }
}     

否则,可能无法生成 MyEventBusIndex class.

相关文章

  • EventBus VS. Otto bus

    EventBus 笔记 APP中模块/层级间交互的逻辑处理往往也起着关键性的作用,一般较为常见的是通过自定义的接口...

  • Greenrobot EventBus vs Otto Bus

    何为EventBus 说到EventBus就不得不提下观察者模式,这个设计模式相信大家都很熟悉了,在这个模式里有2...

  • EventBus HandlerPoster解析

    本篇博文理论知识储备:Otto源码解读EventBus源码解析开篇EventBus BackgroundPoste...

  • android第三方框架(三)EventBus

    EventBus:是用来简化android组建之间的通信,otto也能完成,但效率院低于eventbus。Even...

  • Otto 与 EventBus

    Otto 与 EventBus 这两个框架的实现原理差不多, 在开发中常用 Otto. 我们假设这样一种业务场景,...

  • Android EventBus

    EventBus is a publish/subscribe event bus for Android and...

  • Otto快速使用

    引入 otto 1、创建AppBus单例,提高效率 2、创建数据类(因为otto没有EventBus的tag标记功...

  • EventBus使用

    一、EventBus介绍 Android optimized event bus that simplifies ...

  • EventBus详解及源码分析

    一、前言 从 EventBus 的介绍中,EventBus 给的定位是: Event bus for Androi...

  • [Android组件解读] EventBus3.0解析

    记得前段时间讲解过otto事件总线的概念,但是大家习惯用的事件总线应该还是EventBus。 EventBus介绍...

网友评论

    本文标题:EventBus VS. Otto bus

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