EventBus使用

https://github.com/greenrobot/EventBus/blob/master/HOWTO.md

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

  1. onEvent, 在post所在线程响应(default).
  2. onEventMainThread, 在UI线程响应.
  3. onEventBackgroundThread 如果post不在UI线程则在post所在线程响应,如果post在主线程,则EventBus使用一个单独的线程处理(该事件的都会在这个线程处理,因此耗时操作会阻塞线程).
  4. 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)

你可能感兴趣的:(EventBus使用)