EventBus是怎样管理事件总线的, 是不是最佳处理消息的方案?让我们一同来学习和认识.
EventBus由来
在面对应用程序内组件间, 组件与后台线程间的通信. 又如我们在处理耗时操作时, 等到耗时操作完成后通过Handler或者Broadcast去更新UI, 但是面对多个Activity之间需要通过Listener通信完成. 但是这些问题我们可以通过EventBus来完成.它是通过发布/订阅的方式来管理事件总线 .通过注解和反射机制将订阅者连同订阅函数保存起来, 然后在发送订阅的时候遍历订阅函数数组进行调用, 但是这种形式会影响到EventBus的执行效力.
EventBus的介绍
EventBus出自greenrobot, 与GreenDao是一家. 而EventBus3.0框架采用了建造者模式, 并加入注解, 通过注解的方式告知订阅函数运行在哪一个线程中.
EventBus主要角色
- Event 传递的事件对象
- Subscriber 事件的订阅者
- Publisher事件的发布者
- ThreadMode 定义函数在那种线程中执行
官网给出的各种角色的协作图
EventBus使用
- 在build.gradle中添加引用
compile 'org.greenrobot:eventbus:3.0.0'
2. 定义一个事件类型
public class EventInfoBean {
public String msg;
public EventInfoBean(String msg) {
this.msg = msg;
}
}
3.订阅事件
EventBus.getDefault().register(this);
4. 发布事件
EventBus.getDefault().post(new EventInfoBean("eventBus发送的消息"))
5. 解除订阅(一般放在onDestroy()中)
EventBu