美文网首页
EventBus使用记录与解析

EventBus使用记录与解析

作者: TRT131 | 来源:发表于2019-03-01 22:27 被阅读0次
    使用EventBus的简单三步骤
    //在当前activity中注册
    EventBus.getDefault().register(this);
    
    //同时记得反注册
    EventBus.getDefault().unRegister(this);
    
    //在监听事件的类中加入@Subscribe修饰的处理事件方法
    @Subscribe
        public void onEvent(String event) {
            Log.d(TAG, "onEvent: "+event);
        }
    
    //使用post提交事件
    EventBus.getDefault().post(event);
    

    然后就可以在onEvent()函数中获取提交的event进行处理并响应。

    Subscribe注解
    @Documented
    @Retention(RetentionPolicy.RUNTIME)
    @Target({ElementType.METHOD})
    public @interface Subscribe {
        ThreadMode threadMode() default ThreadMode.POSTING;
    //表示在哪个线程处理事件,默认为ThreadMode.POSTING
    
        boolean sticky() default false;
    //表示是否粘性(即表示该该活动在事件发布后创建仍能够处理事件)
        int priority() default 0;
    }//表示接受事件的优先级
    

    1.ThreadMode 的属性

    • POSTING 默认属性,哪个线程发出的事件,就在哪个线程处理事件
     I/MainActivity: mainTid: 10371
     I/MainActivity: eventTid: 10371
    
    • MAIN 如在主线程(UI线程)发送事件,则直接在主线程处理事件;如果在子线程发送事件,则先将事件入队列,然后通过 Handler 切换到主线程,依次处理事件。
    I/MainActivity: mainTid: 10505
    I/MainActivity: eventTid:10505
    
    • MAIN_ORDERED 无论在那个线程发送事件,都先将事件入队列,然后通过 Handler 切换到主线程,依次处理事件。
    I/MainActivity: mainTid: 10505
    I/MainActivity: eventTid:10505
    
    • BACKGROUND 如果在主线程发送事件,则先将事件入队列,然后通过线程池依次处理事件;如果在子线程发送事件,则直接在发送事件的线程处理事件。
    I/MainActivity: mainTid: 11105
    I/MainActivity: eventTid: 11128
    
    • ASYNC 无论在那个线程发送事件,都将事件入队列,然后通过线程池处理。
    I/MainActivity: mainTid: 11257
    I/MainActivity: eventTid:11290
    

    相关文章

      网友评论

          本文标题:EventBus使用记录与解析

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