奥托vs LocalBroadcast:

Chr*_*ris 44 android android-intent otto localbroadcastmanager

我非常喜欢开源贡献广场已经对Android社区做了什么,并正在调查他们的最新贡献Otto(事件总线)

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

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

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

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

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

参考文献:

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

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

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

Com*_*are 38

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

并不是的.没有sendOrderedBroadcast()打开LocalBroadcastManager,并且IntentFilter似乎没有使用优先级.如果你的意思是"广播将按照我注册接收者的顺序发送",那可能是当前的行为,但不能保证它会保持这种状态.

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

它们会相似,但可能不完全相同.

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

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

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


am5*_*a03 5

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

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

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