美文网首页
EventBus 原理解析 - 使用

EventBus 原理解析 - 使用

作者: 改名_f64e | 来源:发表于2020-02-18 17:07 被阅读0次

EentBus - 简介

EventBus 是一款在 Android 开发中使用的发布/订阅事件总线框架,基于观察者模式,将事件的接收者和发送者分开,简化了组件之间的通信,
GitHub : https://github.com/greenrobot/EventBus
官方流程图:

image

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,无论在那个线程发送事件,都将事件入队列,然后通过线程池处理。

相关文章

网友评论

      本文标题:EventBus 原理解析 - 使用

      本文链接:https://www.haomeiwen.com/subject/acagfhtx.html