EventBus模式也被称为Message Bus模式或者发布者/订阅者(publish/subscribe)模式。可以让两个组件相互通信(publisher发送event到bus,bus在把时间分发到subscriber),但是他们之间并不互相知晓(即不用实现接口,通过接口进行通信)。
EventBus的使用步骤:
1.定义事件
public class TestEvent {
String info;
TestEvent(String info){
this.info = info;
}
public String getInfo(){
return info;
}
}
2.subscriber准备工作:
eventBus.register(this);//注册
public void onEvent(TestEvent event)//定义接收event函数
3.发送event
eventBus.post(event);
**
Event Bus 的ThreadModes
**
PostThread: subscriber会在发送event的线程中被调用。事件处理函数会在次线程中被调用。
// Called in the same thread (default)
public void onEvent(MessageEvent event) {
log(event.message);
}
**MainThread:**subscriber会在主线程中被调用。如果发送event实在主线程中,事件处理函数就会立即被调用。
// Called in Android UI's main thread
public void onEventMainThread(MessageEvent event) {
textField.setText(event.message);
}
如果发送event不是在主线程,由Event Bus 切换线程(之后会分析到)。
BackgroundThread: Subscriber will be called in a background thread. If posting thread is not the main thread, event handler methods will be called directly in the posting thread. If the posting thread is the main thread, EventBus uses a single background thread that will deliver all its events sequentially.
// Called in the background thread
public void onEventBackgroundThread(MessageEvent event){
saveToDisk(event.message);
}
Async: Event handler methods are called in a separate thread. This is always independent from the posting thread and the main thread.(事件处理函数将会在另一个线程中被调用。此线程独立于发送事件的进程和主线程)
// Called in a separate thread
public void onEventAsync(MessageEvent event){
backend.send(event.message);
}
**注意:**EventBus在哪个线程调用subscriber的onEventXX()函数,取决于onEventXX的名字。 eg:onEventMainThread()会在主线程中被调用。