EventBus的简单使用方法
文章目录
1.简介
- EventBus是针对Android 和Java的发布/订阅的事件总线。
- 简化了组件之间的通信。
- 使代码更简单。
- 快速、很小(~ 50 k jar)。
- 高级特性:线程分发、订阅优先级等。
2.添加依赖
- 官网:https://github.com/greenrobot/EventBus
implementation 'org.greenrobot:eventbus:3.1.1'
3.使用简介
3.1 定义一个事件类(Bean)
public static class MessageEvent {
...
}
3.2 在需要订阅事件的地方注册事件
@Override
public void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}
3.3 订阅事件
线程模型:
- POSTING:事件的处理在发布事件的线程执行。
- MAIN:事件的处理在UI线程执行。
- BACKGROUND:若发布事件的线程是UI线程,则事件的处理在新启的子线程执行;若发布事件的线程是子线程,则事件的处理在该子线程执行。
- ASYNC:事件的处理在新启的子线程执行。
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(MessageEvent event) {
...
};
3.4 及时取消注册事件订阅
@Override
public void onStop() {
super.onStop();
EventBus.getDefault().unregister(this);
}
3.5 发布事件
EventBus.getDefault().post(new MessageEvent());
3.6 ProGuard混淆
-keepattributes *Annotation*
-keepclassmembers class * {
@org.greenrobot.eventbus.Subscribe <methods>;
}
-keep enum org.greenrobot.eventbus.ThreadMode { *; }
# Only required if you use AsyncExecutor
-keepclassmembers class * extends org.greenrobot.eventbus.util.ThrowableFailureEvent {
<init>(java.lang.Throwable);
}
3.7 Sticky 粘性事件
- 粘性事件即在事件发布之后再注册,仍然可以订阅到该事件。
@Subscribe(threadMode = ThreadMode.MAIN,sticky = true)
public void onMessageEvent(MessageEvent event) {
...
};
4.其他
- RxBus :基于 RxJava 的事件总线。