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

你可能感兴趣的:(EventBus使用记录与解析)