文章目录
https://github.com/greenrobot/EventBus/blob/master/HOWTO.md
##1:定义事件
事件类就是是简单的java类(POJO (plain old Java object) ),没有任何要求
1 2 3 4 5 6 7
| public class MessageEvent { public final String message; public MessageEvent(String message) { this.message = message; } }
|
##2:准备订阅者
订阅者需要实现onEvent来处理事件,需要在合适的地方注册和注销(如onStart,onStop中,官方文档例子中)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| @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:发送事件
1
| 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 值越大,越先调用
1 2
| int priority = 1; EventBus.getDefault().register(this, priority);
|
##6:取消事件发送
1 2 3 4 5 6
| public void onEvent(MessageEvent event){ // Process the event ... EventBus.getDefault().cancelEventDelivery(event) ; }
|
##7:Sticky Events
EventBus实现了保存最近的事件实例
1 2 3 4 5
| EventBus.getDefault().postSticky(new MessageEvent("Hello everyone!")); // 发送 EventBus.getDefault().registerSticky(this); // 注册 EventBus.getDefault().unregister(this); // 注销 // 获取最新的事件 EventBus.getDefault().getStickyEvent(Class<?> eventType)
|