1:定義事件
事件類就是是簡單的java類(POJO (plain old Java object) ),沒有任何要求
public class MessageEvent {
public final String message;
public MessageEvent(String message) {
this.message = message;
}
}
2:準備訂閱者
訂閱者需要實現(xiàn)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:發(fā)送事件
EventBus.getDefault().post(new MessageEvent("Hello everyone!"));
4:onEvent的ThreadModes
- onEvent, 在post所在線程響應(yīng)(default).
- onEventMainThread, 在UI線程響應(yīng).
- onEventBackgroundThread 如果post不在UI線程則在post所在線程響應(yīng),如果post在主線程,則EventBus使用一個單獨的線程處理(該事件的都會在這個線程處理,因此耗時操作會阻塞線程).
- onEventAsync 獨立于post所在線程和UI線程,適合做一些耗時操作(network access),但要注意數(shù)量,EventBus使用的線程池實現(xiàn).
注5:冊優(yōu)先級
the default priority is 0,priority 值越大,越先調(diào)用
int priority = 1;
EventBus.getDefault().register(this, priority);
6:取消事件發(fā)送
public void onEvent(MessageEvent event){
// Process the event
...
EventBus.getDefault().cancelEventDelivery(event) ;
}
7:Sticky Events
EventBus實現(xiàn)了保存最近的事件實例
EventBus.getDefault().postSticky(new MessageEvent("Hello everyone!")); // 發(fā)送
EventBus.getDefault().registerSticky(this); // 注冊
EventBus.getDefault().unregister(this); // 注銷
// 獲取最新的事件
EventBus.getDefault().getStickyEvent(Class<?> eventType)