Chr*_*ris 44 android android-intent otto localbroadcastmanager
我非常喜欢开源贡献广场已经对Android社区做了什么,并正在调查他们的最新贡献Otto(事件总线)
深入挖掘我看到Otto使用反射并且没有有序广播(一种模式,其中未消息的消息从一个接收器传递到下一个接收器,听取相同类型的事件)Otto相信更多的火灾和忘记模型.
现在android LocalBroadcastManager
在其v4支持库中有(LBM)用于相同的目的,尽管它更笨重并且对传递的对象有更多限制.但在更明亮的一面,它确实支持有序广播,它更像是正常的广播.
Otto和LBM都处于相同的处理空间内,因此就速度而言,我猜两者都是相同的.我能看到的唯一真正的区别是Otto允许您定义自定义事件,而您不必序列化/包裹对象.
因此,我真正的问题是,如果LBM做同样的事情,你何时会使用Otto.
参考文献:
http://nick.perfectedz.com/otto-event-system/
https://plus.google.com/107049228697365395345/posts/6j4ANWngCUY
Com*_*are 38
但在更光明的一面,它确实支持有序广播
并不是的.没有sendOrderedBroadcast()
打开LocalBroadcastManager
,并且IntentFilter
似乎没有使用优先级.如果你的意思是"广播将按照我注册接收者的顺序发送",那可能是当前的行为,但不能保证它会保持这种状态.
Otto和LBM都处于相同的处理空间内,因此就速度而言,我猜两者都是相同的
它们会相似,但可能不完全相同.
因此,我真正的问题是,如果LBM做同样的事情,你何时会使用Otto
比较这两者,奥托有一个更清洁的API,恕我直言.
就个人而言,我会使用greenrobot的EventBus而不是其中任何一个,因为它提供了更灵活的线程模型.
Otto和LBM都处于相同的处理空间内,因此就速度而言,我猜两者都是相同的.
我发现注册Otto事件非常昂贵,有时注册事件订阅者需要超过16毫秒(这意味着您丢弃1个FPS!).这在某种程度上是可以预期的,因为奥托的事件订阅是通过反思完成的.而对于LBM,仅注册只需几百μs,几乎快32倍.(来自traceview的结果,三星Galaxy S4)
但是,当然,使用Otto可以编写更少的代码,这是一个折衷.
归档时间: |
|
查看次数: |
8728 次 |
最近记录: |