前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >EventBus 使用总结

EventBus 使用总结

作者头像
Seven Du
发布2020-12-21 16:19:56
8920
发布2020-12-21 16:19:56
举报

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后,代码混淆配置如下:

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-03-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FreeSWITCH中文社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
事件总线
腾讯云事件总线(EventBridge)是一款安全,稳定,高效的云上事件连接器,作为流数据和事件的自动收集、处理、分发管道,通过可视化的配置,实现事件源(例如:Kafka,审计,数据库等)和目标对象(例如:CLS,SCF等)的快速连接,当前 EventBridge 已接入 100+ 云上服务,助力分布式事件驱动架构的快速构建。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档