最近在项目中用到了EventBus3.0 在使用的过程中 发现了一个问题由于需要全局回调 所以 我EventBus 的注册与反注册写到了基类 ,在代码执行过程中发现post一次时 我的接收时间逻辑走了两次 ,经过查找各种资料 ,解决方案如下:
1. 确保注册的时候没有重复注册 , 重复注册可能导致存在多个此类对象可能导致重复多次的接收
解决方案 1 : 在注册时 判断如果已经注册则不注册 代码如下
if (!EventBus.getDefault().isRegistered(this)) {
EventBus.getDefault().register(this);
}
解决方案 2:还有一种可能则是由于注册 与反注册代码写在oncreate以及onDestory中而导致可能存在多个当前注册的对象 即 可能上一对象没有销毁存在多个 导致并没有取消注册 针对这种情况 只需要将注册与反注册代码写在onStart 以及 onStop 中(以Activity为例) 即可
2.还有就是接收事件线程将 threadMode = ThreadMode.ASYC 更改为 threadMode = ThreadMode.MAIN 避免由于异步造成多个对象 导致 接收多次
以上 希望对你有帮助
网友评论