9

我正在使用此代码将我的 backstack 清理到我的主视图:

while(mFragmentManager.getBackStackEntryCount() > 1) {
            mFragmentManager.popBackStack(null, 0);
}

我很确定这段代码以前可以工作,但是现在 backstack 计数没有改变,也没有 Fragment 被删除,这会导致内存不足异常,因为 while 循环继续运行。

有谁知道它是否有问题,或者 SDK 工具的最新版本中是否存在错误。我不知道是什么导致了问题。

4

4 回答 4

11

您可能正在寻找popBackStackImmediate(). 这会立即执行回栈弹出。

于 2013-10-05T00:09:47.677 回答
7

你也可以.executePendingTransactions();在之后使用popBackStack();

于 2013-06-12T11:31:41.630 回答
6

我当然不会认为这popBackStack()会立即产生影响,而您的循环似乎会这样做。

于 2013-01-22T12:47:43.720 回答
3

什么文件说 popBackStack()

弹出所有返回堆栈状态,直到具有给定标识符的状态。 该函数是异步的——它将要弹出的请求排入队列,但直到应用程序返回其事件循环后才会执行该操作。

因此,在 mFragmentManager.popBackStack(null, 0);您的后台堆栈不为空之后,直到您的事件完全处理。

用于popBackStackImmediate()在当前事件本身中立即清空它。

于 2014-07-15T06:00:38.040 回答