1:定义事件
事件类就是是简单的java类(POJO (plain old Java object) ),没有任何要求
public class MessageEvent {
public final String message;
public MessageEvent(String message) {
this.message = message;
}
}
2:准备订阅者
订阅者需要实现onEvent来处理事件,需要在合适的地方注册和注销(如onStart,onStop中,官方文档例子中)
@Override
public void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}
@Override
public void onStop() {
EventBus.getDefault().unregister(this);
super.onStop();
}
// This method will be called when a MessageEvent is posted
public void onEvent(MessageEvent event){
Toast.makeText(getActivity(), event.message, Toast.LENGTH_SHORT).show();
}
// This method will be called when a SomeOtherEvent is posted
public void onEvent(SomeOtherEvent event){
doSomethingWith(event);
}
3:发送事件
EventBus.getDefault().post(new MessageEvent("Hello everyone!"));
4:onEvent的ThreadModes
- onEvent, 在post所在线程响应(default).
- onEventMainThread, 在UI线程响应.
- onEventBackgroundThread 如果post不在UI线程则在post所在线程响应,如果post在主线程,则EventBus使用一个单独的线程处理(该事件的都会在这个线程处理,因此耗时操作会阻塞线程).
- onEventAsync 独立于post所在线程和UI线程,适合做一些耗时操作(network access),但要注意数量,EventBus使用的线程池实现.
注5:册优先级
the default priority is 0,priority 值越大,越先调用
int priority = 1;
EventBus.getDefault().register(this, priority);
6:取消事件发送
public void onEvent(MessageEvent event){
// Process the event
...
EventBus.getDefault().cancelEventDelivery(event) ;
}
7:Sticky Events
EventBus实现了保存最近的事件实例
EventBus.getDefault().postSticky(new MessageEvent("Hello everyone!")); // 发送
EventBus.getDefault().registerSticky(this); // 注册
EventBus.getDefault().unregister(this); // 注销
// 获取最新的事件
EventBus.getDefault().getStickyEvent(Class<?> eventType)