美文网首页
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