在启动一个页面时,同时给这个页面发送消息,结果收不到。
if (mSourceFrom != null && mSourceFrom == SourceFrom.FROM_SPLASH) {
MainActivity.startMainActivity(this@ChooseProvinceActivity)
EventBus.getDefault().post(SelectCityEvent(localWeatherCity))
finishActivity()
}
在MainActivity的HomeFragment中接收(当然已经注册过):
@Subscribe(threadMode = ThreadMode.MAIN)
fun setSelectCityEvent(selectCityEvent : SelectCityEvent?) {
initCityWeatherFragment(selectCityEvent?.localWeatherCity)
}
原因是:跳转到MainActivity的时候,在EventBus注册之前,消息已经发送了。
解决方案:使用粘性发送消息的方式。
EventBus.getInstance().postSticky(new Test("发送成功"));当然在接收的时候指定方式sticky = true;如@Subscribs(Sticky =true),就可以解决上面的问题。粘性发送消息的意思是如果没有接收到消息还会继续发送最新发送过的消息。