我有一个BaseFragment,它在它的onCreateView方法中创建一个MyObject类。这两个都在ViewPager中。
两个不同的片段来自BaseFragment - FragmentA,FragmentB。
这意味着FragmentA和FragmentB都有自己的MyObject对象实例。
在BaseFragment中,我从onStart();方法调用MyObject对象的myObject.initialise();,从onStop();调用cleanUp();
@Override
public void onStart()
{
super.onStart();
myObject.initialise();
}
@Override
public void onStop()
{
myObject.cleanUp();
super.onStop();
}同样,它位于BaseFragment中,因此FragmentA和FragmentB在其生命周期中都有它。
initialise();函数和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是一个新实例。
发布于 2016-10-17 11:23:43
对于上面的注释,请注意onDestroy()不是必须调用的:https://developer.android.com/reference/android/app/Activity.html#onDestroy()您不应该在Otto的注册/注销调用中依赖它。
关于Subby的问题:我曾经遇到过onStart() / onStop()被调用两次的情况。我最终的结果是放置了一个try-catch块。这肯定不是一个干净的解决方案,但这就是我在找出为什么生命周期会混乱之前所做的。
https://stackoverflow.com/questions/40076459
复制相似问题