一、概述
EventBus是GreenRobot出品的Android系统的一个Event Bus类库,主要是用来简化应用组件之间的通信。
EventBus框架原理流程图
- Publisher:发布者, 通过post()方法将消息事件Event发布到事件总线
- EventBus:事件总线
- Subscriber:订阅者, 收到事件总线发来的消息。即onEvent方法被执行。注意参数类型必须和发布者发布的参数一致。
二、下载EventBus
Gradle:
compile 'org.greenrobot:eventbus:3.0.0'
三、使用(3 steps)
1.定义事件(自定义类,比如)
public class MessageEvent { /* 添加需要的字段 */ }
2.添加订阅者
// onCreate()进行注册
EventBus.getDefault().register(this);
// 需要添加注解
// 接收消息
@Subscribe(threadMode = ThreadMode.MAIN)
public void onEvent(MessageEvent event) {/* 处理事件event... */};
// 在onDestory()进行解除注册
EventBus.getDefault().unregister(this);
3.发布事件
EventBus.getDefault().post(event);
四、进阶(Sticky Events)
***粘性事件***
在事件发送的时候,并没有直接的订阅者,当注册订阅者的时候,我们可以获取以前发送事件
1.定义事件(自定义类,比如)
public class MessageEvent { /* 添加需要的字段 */ }
2.添加订阅者
@Override
public void onStart() {
super.onStart();
// onStart()进行注册
EventBus.getDefault().register(this);
}
// 接收消息
@Subscribe(sticky = true, threadMode = ThreadMode.MAIN)
public void onEvent(MessageEvent event) {
// 必须在主线程更新UI
textField.setText(event.message);
}
@Override
public void onStop() {
// 在onStop()进行解除注册
EventBus.getDefault().unregister(this);
super.onStop();
}
3.发布sticky事件
EventBus.getDefault().postSticky(new MessageEvent("Hello everyone!"));
4.如果不需要事件,进行移除
MessageEvent stickyEvent = EventBus.getDefault().getStickyEvent(MessageEvent.class);
if(stickyEvent != null) {
EventBus.getDefault().removeStickyEvent(stickyEvent);
}