EventBus 報“Subscriber class already registered to event class”錯誤

這句子的話意思也很容易理解,“接收者類已經被註冊爲事件類了”。

之前我是這麼寫:
事件註冊是寫在onStart()裏面的

@Override
    protected void onStart() {
        super.onStart();
            EventBus.getDefault().register(this);
    }

來看一下Activity的生命週期:
這裏寫圖片描述

onStart()方法會在onCreate()後調用一次,在onRestart()後又調用一次,所以難免會出現重複註冊EvenBus的情況。

解決方式:

@Override
    protected void onStart() {
        super.onStart();
        if(!EventBus.getDefault().isRegistered(this)){//加上判斷
            EventBus.getDefault().register(this);
        }
    }

    @Override
    protected void onDestroy() {
        if (EventBus.getDefault().isRegistered(this))//加上判斷
                EventBus.getDefault().unregister(this);
        super.onDestroy();
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章