奥托vs LocalBroadcast:

时间:2014-04-04 19:11:31

标签: android android-intent otto localbroadcastmanager

我非常喜欢开源贡献广场已经为Android社区做过,并正在调查他们最新的贡献Otto(活动巴士)

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

深入挖掘我看到Otto使用反射并且没有有序广播(一种模式,其中未消耗的消息从一个接收器传递到下一个接收器,听取相同类型的事件)Otto相信更多的火灾和忘了模特。

现在android在其v4支持库中有LocalBroadcastManager(LBM),它具有相同的用途,但它更笨重,对传递的对象有更多限制。但在更明亮的一面,它确实支持有序广播,它更像是正常的广播。

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

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

参考文献:

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

Using Intents or an event bus to communicate within the same app

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

3 个答案:

答案 0 :(得分:38)

  

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

不是真的。 sendOrderedBroadcast()上没有LocalBroadcastManagerIntentFilter上的优先级似乎没有被使用。如果你的意思是“广播将以我登记接收者的顺序发送”,那可能是当前的行为,但不能保证它会保持这种状态。

  

Otto和LBM都处于相同的处理空间内,因此就速度而言,我猜两者都是相同的

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

  

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

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

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

答案 1 :(得分:5)

  
    

Otto和LBM都处于相同的处理空间内,因此就速度而言,我猜两者都是相同的。

  

我发现注册Otto事件非常昂贵,有时注册事件订阅者需要超过16毫秒(这意味着您丢弃1个FPS!)。这是有点预期的,因为奥托的事件订阅是通过反思来完成的。 而对于LBM,仅注册只需几百μs,几乎快32倍。 (来自traceview的结果,三星Galaxy S4)

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

答案 2 :(得分:0)

  1. otto使代码更清晰,更小
  2. otto使测试更容易