近期使用EventBus碰到點問題順便分享下,正常情況下使用eventbus進行通訊在需要發送消息的地方EventBus.getDefault().post(wht);直接進行發送,在接收消息的界面oncreate()方法中進行注冊訂閱
EventBus.getDefault().register(this);
在onDestroy();中解除注冊
EventBus.getDefault().unregister(this);然后創建一個方法來接收傳遞過來的數據
//使用EventBus
@Subscribe(threadMode = ThreadMode.MAIN)
public voidonEvent(MtbMessage?integer) {}這樣就可以使用數據進行操作
上面所述為普通的發送事件,但是這種只能是在事先訂閱了才能收到消息
還有另一種粘連事件,就是當消息發送后將消息保存了起來,當你注冊訂閱的時候就會收到事件
發送時使用EventBus.getDefault().postSticky(snmessage);
接收時
@Subscribe(threadMode = ThreadMode.MAIN, sticky =true)
public voidonEvent(MtbMessage integer) {}
這樣就可以接收到數據了,但是你會發現每次進入該頁面時都會收到一條,這里就需要進行處理
//清除黏連事件
MtbMessage stickyEvent = EventBus.getDefault().getStickyEvent(MtbMessage.class);
if(stickyEvent !=null) {
EventBus.getDefault().removeStickyEvent(stickyEvent);
}
使用該方法進行清除,這樣就ok了.