EventBus是什么?
EventBus,顧名思義,是“事件總線”的意思。更具體的說是一個針對Java和Android的事件發布/訂閱框架(EventBus is a publish/subscribe event bus for Android and Java.)
GitHub地址:https://github.com/greenrobot/EventBus
圖示:
EventBus的使用
1.定義事件
public class MessageEvent { private String name; public MessageEvent(String name) { this.name = name; } @Override public String toString() { return "MessageEvent{" + "name='" + name + '\'' + '}'; } }
2.訂閱
普通訂閱:
需要先進行注冊,然后在有相對應的信息發出時,可以獲取到信息。
//注冊和移除需要確定在哪個生命周期進行 //注冊 EventBus.getDefault().register(this); //移除 EventBus.getDefault().unregister(this); //事件處理: //threadMode有四種類型(MAIN、POSTING、BACKGROUND、AYSNC) @Subscribe(threadMode = ThreadMode.MAIN) public void MessageEventBus(MessageEvent event) { tvEventbusResult.setText(event.toString()); }
粘性訂閱
不需要先注冊,當已經有粘性信息發出,注冊時即收到信息。
//注冊和移除需要確定在哪個生命周期進行 //注冊 EventBus.getDefault().register(this); //移除 EventBus.getDefault().removeAllStickyEvents(); EventBus.getDefault().unregister(this); //事件處理: //threadMode有四種類型(MAIN、POSTING、BACKGROUND、AYSNC) @Subscribe(threadMode = ThreadMode.MAIN, sticky = true) public void MessageEventBus(MessageEvent event) { tvEventbusResult.setText(event.toString()); }
3.發送事件
//發送普通事件 EventBus.getDefault().post(new MessageEvent("普通事件")); //發送粘性事件 EventBus.getDefault().postSticky(new MessageEvent("粘性事件"));
EventBus原理
EventBus運用注解和反射技術,發布/訂閱模式、單例模式,通過一系列的操作,實現消息的發送和接收(具體見EventBus源碼)
思考:
結合github上EventBus的介紹,和一些具體介紹EventBus使用的博客,並進行一定的編碼測試,可以做到對EventBus的初步了解和使用。
深入了解的話,還是要結合源碼,一點點分析其設計思想和使用到的語言相關技術和設計模式等。
知其然易,知其所以然難。
--End