EventBus icon indicating copy to clipboard operation
EventBus copied to clipboard

Register in onCreate() can not refresh ui

Open kcjian opened this issue 4 years ago • 1 comments

I will refresh ui when I received this event that send before entering this activity

    @Subscribe(sticky = true, threadMode = ThreadMode.MAIN)
    fun eventLock(operateEvent: OperateEvent) {
        LogUtil.e(TAG, "Locked")
        layoutOnOff.setBackgroundResource(R.drawable.ic_oval_state_locked) 
        tvLockState.setText (R.string.Lock_State_Locked)
    }

if I register in onCreate() , unregister in onDestroy ,when i repeated entry and exit,The UI has not changed,But the log shows that the execution is here LogUtil.e(TAG, "Locked")(It happened after the second entry)

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        EventBus.getDefault().register(this)
    }
    override fun onDestroy() {
        super.onDestroy()
        EventBus.getDefault().unregister(this)
    }

if I register in onResume() , unregister in onPause,It is no problem

    override fun onResume() {
        super.onResume()
        EventBus.getDefault().register(this)
    }

    override fun onPause() {
        super.onPause()
        EventBus.getDefault().unregister(this)
    }

Eventbus version is 3.2.0 Look forward to your reply

kcjian avatar Jul 08 '20 11:07 kcjian

This is likely due to using threadMode = ThreadMode.MAIN. Either drop that, or alternatively synchronously check for the sticky event, like EventBus.getDefault().getStickyEvent(OperateEvent::class.java). https://greenrobot.org/eventbus/documentation/configuration/sticky-events/

greenrobot-team avatar Jul 13 '20 05:07 greenrobot-team