45

我是开源贡献 Square 对 Android 社​​区所做的贡献的忠实粉丝,并且正在研究他们的最新贡献 Otto(事件总线)

http://square.github.io/otto/

深入挖掘,我发现 Otto 使用反射并且没有有序广播(未使用的消息从一个接收器传递到下一个接收相同类型事件的接收器的模式) Otto 相信更多的是“一劳永逸”模型。

现在 androidLocalBroadcastManager在它的 v4 支持库中有 (LBM) 用于同样的目的,虽然它更笨重并且对传递的对象有更多的限制。但从好的方面来说,它确实支持有序广播,并且更类似于正常广播。

Otto 和 LBM 都在同一个进程空间内,所以就速度而言,我猜两者都是一样的。我能看到的唯一真正区别是 Otto 允许您定义自定义事件,并且您不必序列化/打包 Objects 。

因此,我真正的问题是,如果 LBM 做同样的事情,你什么时候会使用 Otto。

参考 :

http://nick.perfectedz.com/otto-event-system/

使用 Intent 或事件总线在同一个应用程序中进行通信

https://plus.google.com/107049228697365395345/posts/6j4ANWngCUY

4

3 回答 3

38

但从好的方面来说,它确实支持有序广播

并不真地。没有sendOrderedBroadcast()on ,并且似乎没有使用LocalBroadcastManageron 的优先级。IntentFilter如果您的意思是“广播将按照我注册接收器的顺序传递”,那可能是当前的行为,但不能保证它会保持这种状态。

Otto 和 LBM 都在同一个进程空间内,所以就速度而言,我想两者都是一样的

它们将是相似的,尽管可能并不相同。

因此,我真正的问题是,如果 LBM 做同样的事情,你什么时候会使用 Otto

比较这两者,Otto 有一个更简洁的 API,恕我直言。

就个人而言,我会在其中任何一个上使用greenrobot 的 EventBus,因为它提供了更灵活的线程模型。

于 2014-04-04T19:22:00.597 回答
5

Otto 和 LBM 都在同一个进程空间内,所以就速度而言,我猜两者都是一样的。

我发现注册 Otto 事件非常昂贵,有时注册事件订阅者需要超过 16 毫秒(这意味着您会降低 1 FPS!)。这在某种程度上是意料之中的,因为在 Otto 中订阅事件是通过反射完成的。而对于 LBM,注册只需要几百微秒,几乎快了 32 倍。(来自 traceview,三星 Galaxy S4 的结果)

但是当然,使用 Otto 可以编写更少的代码,这是一个权衡。

于 2016-03-21T06:06:23.713 回答
0
  1. otto 使代码更干净、更小
  2. otto 使测试更容易
于 2016-06-06T12:34:26.337 回答