首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Otto注销同一实例

Otto注销同一实例
EN

Stack Overflow用户
提问于 2016-10-17 07:06:47
回答 1查看 192关注 0票数 0

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

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

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

BaseFragment中,我从onStart();方法调用MyObject对象的myObject.initialise();,从onStop();调用cleanUp();

代码语言:javascript
复制
@Override
public void onStart()
{
    super.onStart();
    myObject.initialise();
}

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

同样,它位于BaseFragment中,因此FragmentAFragmentB在其生命周期中都有它。

initialise();函数和cleanUp();函数如下所示:

代码语言:javascript
复制
@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是一个新实例。

EN

回答 1

Stack Overflow用户

发布于 2016-10-17 11:23:43

对于上面的注释,请注意onDestroy()不是必须调用的:https://developer.android.com/reference/android/app/Activity.html#onDestroy()您不应该在Otto的注册/注销调用中依赖它。

关于Subby的问题:我曾经遇到过onStart() / onStop()被调用两次的情况。我最终的结果是放置了一个try-catch块。这肯定不是一个干净的解决方案,但这就是我在找出为什么生命周期会混乱之前所做的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40076459

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档