- 什么是EventBus
- 下载EventBus
库地址:https://github.com/greenrobot/EventBus/releases
源码地址:https://github.com/greenrobot/EventBus
2. 将下载好的EventBus-2.4.0.jar放入libs即可
- 如何使用EventBus
2. 添加订阅者:EventBus.getDefault().register(this); 将所在类作为订阅者,框架会通过反射机制获取所有方法及其参数。
订阅者所在类可以定义以下一个或多个方法用以接收事件:
public void onEvent(MsgEvent1 msg)
public void onEventMainThread(MsgEvent1 msg)
public void onEventBackgroundThread(MsgEvent1 msg)
public void onEventAsync(MsgEvent1 msg)
3. 发布者发布事件:EventBus.getDefault().post(new MsgEvent1("主线程发的消息1"));
一旦执行了此方法, 所有订阅者都会执行第二步定义的方法。
4. 取消订阅:EventBus.getDefault().unregister(this); 当订阅者不再被使用,或者被关闭时,最好进行取消订阅,不再接受事件消息。
5. 注意事项:发布者post方法参数是Object类型,也就是可以发布任何事件。订阅者接受消息时,只要定义的是第二步四个方法任意一个,并且参数和发布者发布的一致,即可被执行。发布者也可以通过第二步接收消息,订阅者也可以作为发布者发消息给自己。
- 代码实现 (本例是两个Fragment交互, 也可以是Service,Activity,Fragment以及任意类之间交互)
- 点击左边面板的条目, 可以发送事件,右面板(另一个Fragment)接收到事件,显示界面,打印日志。
- 代码下载 http://yunpan.cn/cctFTVuWtyIgK 访问密码 66ed
- 界面如下
-
1.主界面搭建:
java
xml
2. 定一个事件类MsgEvent1 (MsgEvent2与此一致):
3. 将右面板作为订阅者, 执行方法并接收数据:
4. 在左面板发布消息。(任意类都可以发布消息)
分别点击左边条目, Log输出分析
源码网盘地址:
http://yunpan.cn/cctFTVuWtyIgK 访问密码 66ed
EventBus框架原理流程图
1. Publisher是发布者, 通过post()方法将消息事件Event发布到事件总线
2. EventBus是事件总线, 遍历所有已经注册事件的订阅者们,找到里边的onEvent等4个方法,分发Event
3. Subscriber是订阅者, 收到事件总线发下来的消息。即onEvent方法被执行。注意参数类型必须和发布者发布的参数一致。