我遇到了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,并且在事故发生后没有。
答案 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();
}