1. Publisher是發布者, 通過post()方法將消息事件Event發布到事件總線
2. EventBus是事件總線, 遍歷所有已經注冊事件的訂閱者們,找到里邊的onEvent等4個方法,分發Event
3. Subscriber是訂閱者, 收到事件總線發下來的消息。即onEvent方法被執行。注意參數類型必須和發布者發布的參數一致。
如何使用EventBus
1. 定義事件, 定義一個類,繼承默認的Object即可,用于區分事件和傳輸數據。 本例為MsgEvent1和MsgEvent2
2. 添加訂閱者:EventBus.getDefault().register(this); 將所在類作為訂閱者,框架會通過反射機制獲取所有方法及其參數。
訂閱者所在類可以定義以下一個或多個方法用以接收事件:
public void onEvent(MsgEvent1 msg)
public void onEventMainThread(MsgEvent1 msg)
public void onEventBackgroundThread(MsgEvent1 msg)
public void onEventAsync(MsgEvent1 msg)
3. 發布者發布事件:EventBus.getDefault().post(new MsgEvent1("主線程發的消息1"));
一旦執行了此方法, 所有訂閱者都會執行第二步定義的方法。
4. 取消訂閱:EventBus.getDefault().unregister(this); 當訂閱者不再被使用,或者被關閉時,最好進行取消訂閱,不再接受事件消息。
5. 注意事項:發布者post方法參數是Object類型,也就是可以發布任何事件。訂閱者接受消息時,只要定義的是第二步四個方法任意一個,并且參數和發布者發布的一致,即可被執行。發布者也可以通過第二步接收消息,訂閱者也可以作為發布者發消息給自己。