EventBus 发送一次但是执行了两次回调的解决方案

2021-09-09  本文已影响0人  androidfan

好久没写博客记录了,最近实在太忙了,今天闲暇起来准备优化代码,才发现了一个不解的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()中取消注册,这样即可以解决了,每天记录一点点,收获便捷与成功,耶!

上一篇 下一篇

猜你喜欢

热点阅读