使用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
网友评论