EentBus - 简介
EventBus 是一款在 Android 开发中使用的发布/订阅事件总线框架,基于观察者模式,将事件的接收者和发送者分开,简化了组件之间的通信,
GitHub : https://github.com/greenrobot/EventBus
官方流程图:
EentBus - API
//订阅
EventBus.getDefault().register(this);
//取消订阅
EventBus.getDefault().unregister(this);
//是否已经注册
EventBus.getDefault().isRegistered(this)
//是否订阅了相关类型的消息
EventBus.getDefault().hasSubscriberForEvent()
//发布消息
EventBus.getDefault().post();
//取消
EventBus.getDefault().cancelEventDelivery();
//发布粘性消息
EventBus.getDefault().postSticky();
//取消粘性消息
EventBus.getDefault().removeAllStickyEvents();
EventBus.getDefault().removeStickyEvent();
EventBus - Subscribe注解
@Subscribe
public void handleEvent(String event) {
// todo
}
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface Subscribe {
// 指定事件订阅方法的线程模式,即在那个线程执行事件订阅方法处理事件,默认为POSTING
ThreadMode threadMode() default ThreadMode.POSTING;
// 是否支持粘性事件,默认为false
boolean sticky() default false;
// 指定事件订阅方法的优先级,默认为0,如果多个事件订阅方法可以接收相同事件的,则优先级高的先接收到事件
int priority() default 0;
}
ThreadMode 值 :
ThreadMode.POSTING,默认的线程模式,在那个线程发送事件就在对应线程处理事件,避免了线程切换,效率高。
ThreadMode.MAIN,如在主线程(UI线程)发送事件,则直接在主线程处理事件;如果在子线程发送事件,则先将事件入队列,然后通过 Handler 切换到主线程,依次处理事件。
ThreadMode.MAIN_ORDERED,无论在那个线程发送事件,都先将事件入队列,然后通过 Handler 切换到主线程,依次处理事件。
ThreadMode.BACKGROUND,如果在主线程发送事件,则先将事件入队列,然后通过线程池依次处理事件;如果在子线程发送事件,则直接在发送事件的线程处理事件。
ThreadMode.ASYNC,无论在那个线程发送事件,都将事件入队列,然后通过线程池处理。
网友评论