破坏

时间:2016-06-09 15:00:07

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

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

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

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

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

1 个答案:

答案 0 :(得分:0)

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 - ;如果上面的代码段无法解决OutOFMemory错误的问题,那么在片段生命周期的setRetaininstance(true)系统回调方法中使用onCreate(Bundle),这样如果它已经存在,则不会创建新的片段在记忆中。