Otto取消注册同一个实例

时间:2016-10-16 23:06:47

标签: android otto

我有一个BaseFragment,它在onCreateView方法中,创建一个MyObject类。这两个都在ViewPager中。

两个不同的片段来自BaseFragment - FragmentAFragmentB

这意味着FragmentAFragmentB都有自己的MyObject对象实例。

BaseFragment内,我使用myObject.initialise();方法调用MyObject对象onStart();cleanUp(); onStop(); >

@Override
public void onStart()
{
    super.onStart();
    myObject.initialise();
}

@Override
public void onStop()
{
    myObject.cleanUp();
    super.onStop();
}

再次 - 它位于BaseFragment内,因此FragmentAFragmentB在其生命周期中都有这个。

初始化(); 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是一个新实例。

1 个答案:

答案 0 :(得分:0)

对于上面的评论,请注意onDestroy()不需要调用: https://developer.android.com/reference/android/app/Activity.html#onDestroy() 对于Otto的注册/取消注册电话,您不应该依赖它。

关于Subby的问题:我有过两次调用onStart()/ onStop()的场景。我最终得到的是一个try-catch块。绝对不是一个干净的解决方案,但在找出生命周期搞砸的原因之前,我就是这样做的。