Otto和EventBus(消息总线EventBus简介)一样是一个事件总线库,实际上Otto是fork的Guava’s EventBus。Greenrobot’s EventBus和Otto都有一些相同的语义的操作(register,post,unregister,…),下面的表格中对EventBus和Otto的特性进行对比:
除了特性,还有性能的对比。结果显示EventBus在各个方面都明显比Otto更快。
different scenario | EventBus | Otto |
---|---|---|
Posting 1000 events, Android 2.3 emulator | ~70% faster | |
Posting 1000 events, S3 Android 4.0 | ~110% faster | |
Register 1000 subscribers, Android 2.3 emulator | ~10% faster | |
Register 1000 subscribers, S3 Android 4.0 | ~70% faster | |
Register subscribers cold start, Android 2.3 emulator | ~350% faster | |
Register subscribers cold start, S3 Android 4.0 | About the same |
为什么EventBus性能优于Otto呢?
很重要的原因是EventBus采用的是Name conventions(命名惯例)确定订阅者(onEvent,onEventMainThread…),这里恰好是采用了一种软件设计范式:约定优于配置(convention over configuration),也称作按约定编程,旨在减少软件开发人员需做决策的数量,简单的同时又不失灵活性。而Otto是采用的Annotations,我们知道注解在Android系统中性能并不高。