Eventbus中,当我们发送消息时,接收消息的界面还没加载或者没有注册Eventbus,这个场景我们为了在消息接收处能接收到消息,需要用到postSticky来发送粘性消息,普通的post是达不到上面想要的效果的。
发送代码如下:
EventBus.getDefault().postSticky(
ShowMiniAnalyzeResultEvent(
geometry as PolygonGeometry,
AnalyzeType.ANALYZE_MANUAL.type,
binding.mapView
)
)
接收代码:
@Subscribe(threadMode = ThreadMode.MAIN, sticky = true)
public void showMiniAnalyzeResult(ShowMiniAnalyzeResultEvent event) {
......
}
现在接收的地方是能接收到了,但是一旦接收了,再次进入这个接收页面,还会执行接收事件,导致重复执行多次,还有如果该界面有多个接收事件,也会存在多个接收事件多次执行的情况。解决办法:在接收到消息后移除粘性事件
EventBus.getDefault().removeStickyEvent(event);
代码如下所示:
@Subscribe(threadMode = ThreadMode.MAIN, sticky = true)
public void showMiniAnalyzeResult(ShowMiniAnalyzeResultEvent event) {
EventBus.getDefault().removeStickyEvent(event);
......
}