3

以编程方式清除片段回栈的最佳方法是什么?

我只使用一个活动和一组片段实现了屏幕导航。我想要一种将用户带到登录屏幕(当注销超时到期时)并清除所有片段历史记录的方法,最好的方法是什么?我在这里找到了几个答案,但我不知道哪个是最好的......提前谢谢!

目前我正在使用这个

public void clearBackStack() {
    FragmentManager fragmentManager = holder.getSupportFragmentManager();

    while (fragmentManager.getBackStackEntryCount() != 0) {
        fragmentManager.popBackStack(null, 0);
    }
}

然而有时我会摆脱内存异常

4

2 回答 2

13

在这一点上,这是一个相当古老的问题。无论如何,我尝试了你的代码,看起来你有一个无限循环。

popBackStack(null, 0)搜索带有空标签的片段,该片段将永远找不到。while 循环将循环直到内存用完。另一个问题popBackStack是 pop 不一定会立即执行,因此 while 循环可能会运行一段时间。

如果您想从后台堆栈中删除片段而不考虑标签或 ID,请fragmentManager.popBackStackImmediate()改用。

于 2012-11-18T19:17:07.053 回答
0

您可以使用FragmentManager.popBackStack()清除后台堆栈。

fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);

这将清空堆栈而不加载到容器中。

于 2017-02-16T10:05:08.933 回答