在我的应用程序中,我使用backstack作为我的片段,使用popBackStack来支持前一个片段。
当我通过popBackStack回到之前的片段时,我遇到了问题。 (FragmentA-> FragmentB-> FragmentA)。我在fragmentB中看到popBackStack到之前的fragmentA,它被称为onDestroy
方法。我在getFragmentManager().getFragments()
中找到了FragmentB,但我可以找到它。
然而,当我转储内存堆时,我在堆上找到x FragmentB(我打开片段B x次)。它增加了我的内存堆,然后当我重复流A-> B-> A直到满堆时,我得到了错误OutOFMemory
。
我无法找到解决问题的任何方法或原因。对我的问题有什么建议吗?
答案 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)
,这样如果它已经存在,则不会创建新的片段在记忆中。