清除片段堆栈编程的最佳方法是什么?
我只使用一个活动和一组片段实现了屏幕导航。我想有一个方法将用户带到登录屏幕(当注销超时到期时)并清除所有片段历史记录,最好的方法是什么?我在这里找到的答案很少,但我不知道哪个是最好的......提前谢谢!
目前我正在使用这个
public void clearBackStack() {
FragmentManager fragmentManager = holder.getSupportFragmentManager();
while (fragmentManager.getBackStackEntryCount() != 0) {
fragmentManager.popBackStack(null, 0);
}
}
但有时候我会出现'OutMemoryException
答案 0 :(得分:11)
这是一个非常古老的问题。无论如何,我尝试了你的代码,看起来你有一个无限循环。
popBackStack(null, 0)
搜索带有null标记的片段,该片段永远不会被找到。 while循环将循环直到内存耗尽。 popBackStack
的另一个问题是pop不一定立即执行,因此while循环可能会运行一段时间。
如果您想从后台堆栈中删除片段而不管标签或ID,请改用fragmentManager.popBackStackImmediate()
。
答案 1 :(得分:0)
您可以使用FragmentManager.popBackStack()
清除后台堆。
fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
这将清空堆栈而不加载到容器中。