EventBus使用记录与解析

使用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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容