奥托vs LocalBroadcast:

我是开源贡献广场的一个巨大粉丝,已经为Android社区做了一些工作,并且正在研究他们最新的贡献Otto(事件总线)

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

深入挖掘,我发现Otto使用reflection,没有有序的广播(一个未消耗的消息从一个接收器传递到下一个接收器,在相同types的事件中聆听)Otto相信更多的消失模型。

现在,android在其v4支持库中提供了LocalBroadcastManager (LBM),它可以达到同样的目的,虽然它比较笨重,并且对传递的对象有更多的限制。 但在更明亮的一面,它确实支持有序的广播,更像是正常的广播。

奥托和LBM都在同一个进程空间内,所以在速度方面我想两者都是一样的。 我能看到的唯一真正的区别是,Otto允许你定义自定义事件,而且你不必序列化/包裹对象。

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

参考文献

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

使用Intents或事件总线在相同的应用程序内进行通信

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

但在更明亮的一面,它确实支持有序广播

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

奥托和LBM都在相同的进程空间,所以在速度方面,我猜两者都是一样的

他们会相似,但可能不相同。

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

比较这两个,奥托有一个更清洁的API,恕我直言。

就我个人而言,我会使用greenrobot的EventBus ,因为它提供了更灵活的线程模型。

奥托和LBM都在相同的进程空间,所以在速度方面,我猜两者都是一样的。

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

但是,当然,使用Otto可以编写更less的代码,这是一个折衷。

  1. 奥托使代码更清洁,更小
  2. 奥托使testing更容易