奥托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的代码,这是一个折衷。
- 奥托使代码更清洁,更小
- 奥托使testing更容易