我非常喜欢开源贡献广场已经为Android社区做过,并正在调查他们最新的贡献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
答案 0 :(得分:38)
但在更明亮的一面,它确实支持有序广播
不是真的。 sendOrderedBroadcast()
上没有LocalBroadcastManager
,IntentFilter
上的优先级似乎没有被使用。如果你的意思是“广播将以我登记接收者的顺序发送”,那可能是当前的行为,但不能保证它会保持这种状态。
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)