我有一个BaseFragment,它在onCreateView方法中,创建一个MyObject类。这两个都在ViewPager中。
两个不同的片段来自BaseFragment
- FragmentA
,FragmentB
。
这意味着FragmentA
和FragmentB
都有自己的MyObject对象实例。
在BaseFragment
内,我使用myObject.initialise();
方法调用MyObject
对象onStart();
,cleanUp();
@Override
public void onStart()
{
super.onStart();
myObject.initialise();
}
@Override
public void onStop()
{
myObject.cleanUp();
super.onStop();
}
再次 - 它位于BaseFragment
内,因此FragmentA
和FragmentB
在其生命周期中都有这个。
初始化(); function和cleanUp();函数看起来像这样:
@Override
public void initialise()
{
BusManager.register(this);
}
@Override
public void cleanUp()
{
BusManager.unregister(this);
}
FragmentA
通常会先关闭,然后成功取消注册。但是当FragmentB
关闭时,它会崩溃,因为它认为this
未注册。
我检查了this
的内存地址,看起来它试图unregister
两次同样的事情。
Missing event handler for an annotated method. Is class com.example.app.MyObject registered?
为什么这样做?我确保MyObject
是一个新实例。
答案 0 :(得分:0)
对于上面的评论,请注意onDestroy()不需要调用: https://developer.android.com/reference/android/app/Activity.html#onDestroy() 对于Otto的注册/取消注册电话,您不应该依赖它。
关于Subby的问题:我有过两次调用onStart()/ onStop()的场景。我最终得到的是一个try-catch块。绝对不是一个干净的解决方案,但在找出生命周期搞砸的原因之前,我就是这样做的。