Android生命周期和事件总线问题

时间:2015-01-24 05:28:55

标签: android android-lifecycle greenrobot-eventbus

我遇到了android生命周期和Eventbus的一些问题。 https://github.com/greenrobot/EventBus

目前,我正在onCreate生命周期回调中将活动注册到总线。

我也在onStop回调中取消注册。 然后我在onRestart上注册它。

当我从应用程序中点击主页按钮,然后重新启动应用程序时,它会记录正在调用onRestart。然而,在此之后,当我尝试做某事时,它给了我:

  

01-24 05:23:44.504:D / Event(3134):没有订阅者注册参加活动类com.garrrila.iconolist.events.IconSelectorEvent。

这是怎么回事?

我的onRestart代码:

@Override
public void onRestart(){
    Log.d(TAG, "onRestart called.");
    super.onRestart();
    EventBus.getDefault().register(this);
}

EDIT ****

事实证明我是个白痴。

在注销或注册之前没有打电话给super,并且在事故发生后没有。

3 个答案:

答案 0 :(得分:0)

看一下这个答案OnRestart vs. OnResume - Android Lifecycle Question,我建议在 onStart()内部并在 onStop()上取消,并避免使用 onRestart ()

查看生命周期图

修改

分析链接,我建议从 onStart 转移到 onCreate ,因为如果您在活动之间移动,那么会重新显示(您没有使用)片段,你呢?)

答案 1 :(得分:0)

如果您不希望收到任何事件,请在任何地方制作一些存根方法public void onEvent(Object obj)。请按照设计进行操作。

答案 2 :(得分:0)

你应该在超级register()onStart()onStop()

之前致电onPause()

像这样,

@Override
public void onStart() {
    //Log.e(TAG, "onStart");
    EventBus.getDefault().register(this);
    super.onStart();
}

@Override
public void onStop() {
    //Log.e(TAG, "onStop");
    EventBus.getDefault().unregister(this);
    super.onStop();
}

@Override
public void onPause() {
    //Log.e(TAG, "onPause");
    EventBus.getDefault().unregister(this);
    super.onPause();
}