EventBus
来源:互联网 发布:linux搭建邮件系统 编辑:程序博客网 时间:2024/05/18 03:20
EventBus是针一款对Android的发布/订阅事件总线。它可以让我们很轻松的实现在Android各个组件之间传递消息,并且代码的可读性更好,耦合度更低
在3.0之前,EventBus还没有使用注解方式。消息处理的方法也只能限定于onEvent、onEventMainThread、onEventBackgroundThread和onEventAsync,分别代表四种线程模型。而在3.0之后,消息处理的方法可以随便取名,但是需要添加一个注解@Subscribe
线程模型
在EventBus的事件处理函数中需要指定线程模型,即指定事件处理函数运行所在的想线程。在上面我们已经接触到了EventBus的四种线程模型。那他们有什么区别呢?
在EventBus中的观察者通常有四种线程模型,分别是PostThread(默认)、MainThread、BackgroundThread与Async。
· PostThread:如果使用事件处理函数指定了线程模型为PostThread,那么该事件在哪个线程发布出来的,事件处理函数就会在这个线程中运行,也就是说发布事件和接收事件在同一个线程。在线程模型为PostThread的事件处理函数中尽量避免执行耗时操作,因为它会阻塞事件的传递,甚至有可能会引起ANR。
· MainThread:如果使用事件处理函数指定了线程模型为MainThread,那么不论事件是在哪个线程中发布出来的,该事件处理函数都会在UI线程中执行。该方法可以用来更新UI,但是不能处理耗时操作。
· BackgroundThread:如果使用事件处理函数指定了线程模型为BackgroundThread,那么如果事件是在UI线程中发布出来的,那么该事件处理函数就会在新的线程中运行,如果事件本来就是子线程中发布出来的,那么该事件处理函数直接在发布事件的线程中执行。在此事件处理函数中禁止进行UI更新操作。
· Async:如果使用事件处理函数指定了线程模型为Async,那么无论事件在哪个线程发布,该事件处理函数都会在新建的子线程中执行。同样,此事件处理函数中禁止进行UI更新操作。
黏性事件
能够收到订阅之前发送的消息。但是它只能收到最新的一次消息,比如说在未订阅之前已经发送了多条黏性消息了,然后再订阅只能收到最近的一条消息
一些事件进行信息感兴趣的事件后发布。例如,一个事件信号,一些初始化完成。 或者如果你有传感器位置数据和你想抓住最近的值。 而不是实现自己的缓存,您可以使用黏性的事件。 EventBus保持过去的事件的特定类型在内存中。 黏性的事件可以交付给用户或显式查询。因此,你不需要任何特殊的逻辑来考虑可用的数据。
EventBus http://blog.csdn.net/harvic880925/article/details/40660137
EventBus粘性事件
http://blog.csdn.net/byoooy/article/details/52326323
- EventBus
- EventBus
- EventBus
- EventBus
- EventBus
- EventBus
- EventBus
- EventBus
- EventBus
- EventBus
- EventBus
- EventBus
- EventBus
- Eventbus
- EventBus
- EventBus
- EventBus
- EventBus
- Failed to import pydot. You must install pydot and graphviz...-keras使用pydot出错(ubuntu16.04)
- 第8周【项目2
- mybatis include choose when if
- oracle导入dmp备份文件
- web前端开发笔记:JavaScript面向对象总结
- EventBus
- Codeforces Round #440 C. Maximum splitting
- 登陆网页验证
- OpenGL学习: 帧缓冲对象(Frame Buffer Object)
- 使用腾讯云 SCF 云函数压缩 COS 对象存储文件
- ST官方库函数之GPIO复位函数void GPIO_DeInit(GPIO_TypeDef* GPIOx) 的理解
- 配置hive的环境变量
- 第五周-项目二-建立链栈算法库
- 数据结构第八周项目(1)——建立顺序串算法库