組件間通信框架 EvenBus
在項目中首先添加EvenBus的jar包
整體過程大致可以分爲3類:
1.在onCreat中使用EvenBus.getInstatnce().register(this);
2.使用EventBus.getDefault().post(object)進行事件的分發。
onEvenMainThread, (方法在UI線程執行)
onEvenPostThread,(方法在當前發佈事件的線程執行)
onEventBackgroundThread,(如果在非UI線程發佈的事件,則直接執行,和發佈在同一個線程中。如果在UI線程發佈的事件,則加入後臺任務隊列,使用線程池一個接一個調用)
onEventAsyns(加入後臺任務隊列,使用線程池調用,注意沒有BackgroundThread中的一個接一個)
接收post傳遞的參數並進行操作。
3.在onDestroy中使用EventBus.getDefault().unregister(this);
一.第一步中,對事件進行訂閱,調用EvenBus.getInstatnce().register(this)後,會遍歷該類下所有以onEvent開頭的方法,存在一個Map中。
二.第二步,通過post中傳遞的參數類型,進行判斷執行哪一個onEven方法。其實在第一步的Map中的key就是post的class類型。
三。第三步,註銷事件訂閱。
關於EventBus的使用,如果需要使用很多觀察者模式。
比如,你正在開發一個東西,需要監聽網絡狀態變化,App的安裝情況,內容的下載情況。當存在很多觀察者模式
,「如何將這些事件通知到監聽者」是可以複用的模塊,這就是EventBus
存在的意義。這裏需要大家想明白一個問題,觀察者模式
本身就是一個可以複用的模塊。
如果項目裏面有大量的事件交互,那麼還是可以通過EventBus
來實現,否則還是推薦自己在模塊內部實現觀察者模式
如果多個方法參數都一樣,post一個此參數,會多個方法調用;
使用EventBus的時候,創建一個事件類,把你的每一個參數(或者可能發生衝突的參數),封裝成一個類。
public class Event{
public static 參數;
............
}