0

我在使用 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);
}

编辑****

原来我是个白痴。

在取消注册或注册之前没有打电话给超级,并且在意外之后做了。

4

3 回答 3

0

如果您不希望收到任何事件,请在任何地方创建一些存根方法 public void onEvent(Object obj)。只需按照设计。

于 2015-02-08T19:24:03.890 回答
0

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

查看生命周期图

编辑

分析链接,我建议从onStart移动到onCreate,因为那里的答案很清楚,如果你在活动之间移动,它们会被重新创建(你没有使用片段,是吗?)

于 2015-01-24T05:38:40.490 回答
0

你应该register()在 super in 之前打电话给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();
}
于 2017-01-05T09:22:35.060 回答