EventBus定義:
EventBus是一個基于觀察者模式的事件發(fā)布/訂閱框架,開發(fā)者通過極少的代碼去實現(xiàn)多個模塊之間的通信,而不需要以層層傳遞接口的形式去單獨構建通信橋梁。從而降低因多重回調導致的模塊間強耦合,同時避免產(chǎn)生大量內部類。擁有使用方便,性能高,接入成本低,支持多線程的優(yōu)點。
如何實現(xiàn)Eventbus
1.定義事件(事件是POJO(plain old java object)類型,不需要什么特別的需求)
public class MessageEvent {
public final String message;
public MessageEvent(String message) {
? this.message = message;
}
2.準備訂閱者(訂閱者實現(xiàn)事件處理方法(也叫做訂閱者方法),這個方法會在事件提交的時候被調用。這些是使用@Subscribe注解定義的。請注意EventBus 3的方法名字可以自由選擇(不像EventBus 2中約束的那樣)。)
// 當一個Message Event提交的時候這個方法會被調用
@Subscribe
public void onMessageEvent(MessageEvent event){
? ? Toast.makeText(getActivity(), event.message, Toast.LENGTH_SHORT).show();
}
// 當一個SomeOtherEvent被提交的時候這個方法被調用。
@Subscribe
public void handleSomethingElse(SomeOtherEvent event){
? ? doSomethingWith(event);
}
訂閱者也需要在bus中注冊和注銷。只有在訂閱者注冊的時候,他們才會收到事件。在Android中,Activities和Fragments通常綁定他們的生命周期.
@Override
public void onStart() {
? ? super.onStart();
? ? EventBus.getDefault().register(this);
}
@Override
public void onStop() {
? EventBus.getDefault().unregister(this);
? ? super.onStop();
}
3.提交事件(在代碼中任意位置提交事件。所有當前注冊的匹配事件類型的訂閱者都會收到事件。)
EventBus.getDefault().post(newMessageEvent("Hello everyone!"));