Android studio 依赖
org.greenrobot : eventbus : 3.0.0
初始化EventBus
EventBus默认有一个单例,可以通过 getDefault() 获取
也可以通过EventBus.builder()
构造自定义的EventBus
注册EventBus
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//注册
EventBus.getDefault().register(this);
});
}
取消注册
@Override
protected void onDestroy() {
EventBus.getDefault().unregister(this);
super.onDestroy();
}
作为一个消息总线,有三个主要的元素:
- Event:事件订阅者,接收特定的事件 Event 任意对象
- Publisher:事件发布者,用于通知 Publisher 以在方法上添加注解的形式
- Subscriber:事件订阅者Subscriber可以在任意线程任意位置发送事件,直接调用EventBus的post(Object)方法
Event类
public class EventType {
public EventType(){}
}
事件订阅者
@Subscribe(threadMode = ThreadMode.MAIN)
public void onEventUI(String event){
Toast.makeText(this, event, Toast.LENGTH_SHORT).show();
}
事件发布者
EventBus.getDefault().post(new String("获取成功"));
ThreadMode
PostThread:事件的处理在和事件的发送在相同的进程而这个线程可能是UI线程onEvent。
MainThread: 事件的处理会在UI线程中执行
BackgroundThread:事件的处理会在一个后台线程中执行,事件处理是在后台线程,但事件处理时间还是不应该太长,因为如果发送事件的线程是后台线程,会直接执行事件,如果当前线程是UI线程,事件会被加到一个队列中,由一个线程依次处理这些事件,如果某个事件处理时间太长,会阻塞后面的事件的派发或处理。
Async:事件处理会在单独的线程中执行,主要用于在后台线程中执行耗时操作,每个事件会开启一个线程(有线程池),但最好限制线程的数目。