好久没写博客记录了,最近实在太忙了,今天闲暇起来准备优化代码,才发现了一个不解的bug,EvenBus执行了两次!这导致在事件中写的Toast和跳转页面也执行了两次
EventBusConfig.ADDSETTING -> {
val content = eventBusModel.content
val jsonObject = JSON.parseObject(content)
val code = jsonObject.getInteger("code")
val msg = jsonObject.getString("msg")
if (code == 200) {
Xtoastutils.info("操作成功")
startActivity(Intent(this, SensitiveListActivity::class.java))
finish()
} else {
Xtoastutils.error(msg + "")
}
}
就这里,我跟后台排查,发现发送的确实是一次网络请求,但是此处的回调确实执行了两次,我将目光放在了ADDSETTING上,但发现,发送和接收的依据也是唯一的,并且只有此处在用,这就让人摸不着头脑子了,既不是网路请求响应问题,也不是重复发送广播导致,那到底是为什么呢?
真相有且只有一个,那就是EventBus的注册与取消注册导致的
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
context = this;
if (!isShowTitle) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
}
if (!isShowStatusBar) {
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN
, WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
//设置布局
setContentView(initLayout());
//activity管理
ActivityCollector.addActivity(this);
StatusBarUtils.translucent(this);
StatusBarUtils.setStatusBarLightMode(this);
ButterKnife.bind(this);
//初始化控件
initView(savedInstanceState);
if (isRegisteredEventBus) {
EventBus.getDefault().register(context);
}
//设置数据
initDatas();
//设置监听
initListener();
}
@Override
protected void onDestroy() {
super.onDestroy();
//activity管理
ActivityCollector.removeActivity(this);
if (isRegisteredEventBus) {
EventBus.getDefault().unregister(this);
}
}
习惯性地在onCreate()方法中注册,在onDestroy()中注销,修改为
override fun onStart() {
super.onStart()
EventBus.getDefault().register(this)
}
override fun onStop() {
super.onStop()
EventBus.getDefault().unregister(this)
}
在onStart()中注册,在onStop()中取消注册,这样即可以解决了,每天记录一点点,收获便捷与成功,耶!
网友评论