【问题标题】:Fragment not clear on memory heap after destroyed销毁后内存堆上的片段不清晰
【发布时间】:2016-10-10 07:42:53
【问题描述】:

在我的应用程序中,我使用 backstack 作为我的片段,并使用 popBackStack 支持前一个片段。

当我通过 popBackStack 返回上一个片段时遇到问题。 (片段A->片段B->片段A)。我在fragmentB中看到popBackStack到前一个fragmentA时,它被称为onDestroy方法。我在getFragmentManager().getFragments() 中找到了 FragmentB,但我可以找到它。

但是,当我转储内存堆时,我在堆上找到 x FragmentB(我打开片段 B x 次)。它增加了我的内存堆,然后当我重复流 A->B->A 直到堆满时出现错误OutOFMemory

我找不到任何解决方案或问题的原因。对我的问题有什么建议吗?

【问题讨论】:

  • 您应该检查是否有任何对 FragmentB 的强引用在销毁时未释放。如果可能,请在此处分享您的代码 sn-ps,以便每个人都可以给您建议。
  • 抱歉,我无法分享我的代码。我在这里创建了像我的流应用程序这样的示例项目:github.com/sinhpn92/FragmentStackTest。我的样品没有这个问题。但是在我的项目中,我遇到了上述问题。我不知道为什么?这个问题有什么原因吗?
  • 你解决了吗?

标签: android android-fragments out-of-memory heap-memory


【解决方案1】:

1> 尝试在堆栈中维护片段(在添加新片段时添加弹出窗口)

例如:

private Stack<Fragment> fragmentStack = new Stack<Fragment>();

// code to add new fragment in stack and previous fragment in back stack 
FragmentTransaction ft = fragmentManager.beginTransaction();

Fragment mFragment = new Fragment(); // you can replace this with your fragment
ft.add(R.id.container, mFragment); // you can also add fragment id so that if you can reuse that fragment if it is memory.
fragmentStack.lastElement().onPause();
ft.hide(fragmentStack.lastElement());
fragmentStack.push(resultListFragment);
ft.commit();

// code to remove visible fragment from top and resume back stack fragment
if (fragmentStack.size() == 2)// used to check whether their is any fragment in stack is yes than go for back event like onbackbutton event { 
    FragmentTransaction ft = fragmentManager.beginTransaction();
    fragmentStack.lastElement().onPause();
    ft.remove(fragmentStack.pop());
    fragmentStack.lastElement().onResume();
    ft.show(fragmentStack.lastElement());
    ft.commit();
}

2> 如果上面的代码 sn -p 没有解决你的OutOFMemory 错误问题,那么在片段生命周期的onCreate(Bundle) 系统回调方法中使用setRetaininstance(true) 这样它就不会创建一个新的片段,如果它已经在内存中了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    • 2014-05-30
    • 2016-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-28
    相关资源
    最近更新 更多