EventBus 使用总结 |
---|
为什么要用EventBus?
EventBus是一个事件总线框架,观察者模式的变形,利用这个框架,我们可以方便高效地在Android组件间传递和处理数据,切换线程,降低代码耦合度。 本文基于 EventBus 3.0。
简单使用
* 配置build.gradle
* 观察者Java代码(以Activity为例)
* 发送事件
发送事件后,所有订阅事件的观察者会回调包含 @Subscribe 这个注释且方法参数为String的方法,可以把String换成任何我们需要的Object来传递数据。
EventBus的进阶使用 |
---|
线程模式
EventBus总共有四种线程模式:
1.ThreadMode.POSTING
这是缺省模式,onEvent会在发布事件的线程中运行,即发布事件和接收处理事件将会运行在同一个线程。 这种模式下不要在onEvent中执行耗时操作,否则会延迟其他观察者的对事件的接收,阻塞线程。
2.ThreadMode.MAIN
不论事件是在哪个线程中发布出来的,onEvent都会在UI线程中执行,即接收处理事件运行在UI线程中。 当分发事件的线程不在UI线程中时,可以使用这种方法来更新UI。 这种模式下不要在onEvent中执行耗时操作,否则会延迟其他观察者的对事件的接收,阻塞线程。
3.ThreadMode.BACKGROUND
如果事件从UI线程中分发,那么onEvent就会在子线程中运行,如果事件本来就是子线程中发布出来的,那么onEvent函数直接在该子线程中执行。 这种模式下不要在onEvent中执行耗时操作,否则会延迟其他观察者的对事件的接收,阻塞线程。
4.ThreadMode.ASYNC
无论事件在哪个线程发布,都会创建新的子线程来执行onEvent。
* 举例
粘性事件和事件优先级
* 粘性事件
这样即便事件先发出去,观察者后订阅的事件,也可以回调onEvent
* 事件优先级
事件发送后,会按照优先级的顺序来接收事件。
注解处理器
上文中对EventBus的使用是最基本的使用方法,因为观察者类信息要通过反射获取,所以效率有所欠缺,这里推荐使用Google的注解处理器AnnotationProcessor,在编译期获取类信息,生成索引,提高运行效率。
*配置build.gradle
* 应用初始化时配置
这样配置之后,EventBus的效率就得到了提高,具体使用方法和之前相同。
使用EventBus后的代码混淆 |
---|
使用EventBus后,代码混淆配置如下:
本文分享自 FreeSWITCH中文社区 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!