近期使用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了.
网友评论