首先gradle中引入設計模式
compile 'org.greenrobot:eventbus:3.0.0'
EventBus經常使用的有三個函數框架
1.註冊事件,註冊過的類可以接受EventBus發出的消息事件.函數
EventBus.getDefault().register(this);
2.取消註冊post
EventBus.getDefault().unregister(this);
3.發出消息,在任意一個活動或服務中調用該方法傳遞數據,全部註冊過事件的類都能收到消息,參數爲object類型,在事件處理函數中強制轉換gradle
EventBus.getDefault().post("你好");
4.事件處理函數,在註冊過EventBus的類中用該函數處理post傳遞的數據。函數名可爲任意的,只需用註解聲明(僅限於EventBus3.0,3.0開始支持註解,以前的版本函數爲固定的幾個函數),下面解釋threadMode參數this
@Subscribe(threadMode = ThreadMode.MAIN) public void XXX(String str){ Log.d("LoginActivity",str); }
1.參數含義,threadMode共有4個參數,標識函數在哪一個地方運行,好比主線程或者子線程。spa
2.事件優先級。在相同的線程模式下,高優先級的訂閱者將會比低優先級的訂閱者更早接收到事件。EventBus默認的優先級是0,這樣高優先級事件處理完時間後可使用cancelEventDelivery(object),阻斷消息的傳播。
注意:優先級不會影響不一樣線程模式下的訂閱者接收事件的順序。線程
@Subscribe(threadMode = ThreadMode.MAIN,priority = 1)
public void XXX(object o){
//處理邏輯
//阻斷傳遞
cancelEventDelivery(o);
}
簡單的說粘性事件就是在發佈粘性消息後,再在某個類中註冊EventBus,聲明一個粘性事件處理函數任然能夠接收到以前發佈的粘性事件。設計
1.發佈事件,注意這裏是postStickycode
EventBus.getDefault().postSticky("Hello everyone!");
2.註冊Eventbus,和以前同樣
EventBus.getDefault().register(this);
3.處理消息,注意在註解參數中聲明:sticky:true,表示該事件可以接受粘性事件
@Subscribe(sticky = true, threadMode = ThreadMode.MAIN) public void onEvent(String event) { Log.d("EventBus",event); }