我正在使用此代码清理我的后台堆栈到我的主视图:
while(mFragmentManager.getBackStackEntryCount() > 1) {
mFragmentManager.popBackStack(null, 0);
}
我很确定此代码之前有效,但现在backstack计数没有改变,并且没有删除Fragment,这会导致内存不足异常,因为while循环一直在运行。
有没有人知道,如果它有什么问题,或者最新版本的SDK工具中有错误。我不知道是什么导致了这个问题。
答案 0 :(得分:11)
您可能正在寻找popBackStackImmediate()
。这会立即执行后筹码弹出。
答案 1 :(得分:7)
您也可以在.executePendingTransactions();
popBackStack();
答案 2 :(得分:6)
我当然不会认为popBackStack()
会立即产生影响,而你的循环似乎也是如此。
答案 3 :(得分:3)
说明了什么文件
popBackStack()
:
将所有后备堆栈状态弹出到具有给定标识符的堆栈状态。 此函数是异步的 - 它将请求排入pop,但是 在应用程序返回之前,不会执行该操作 事件循环。
所以在mFragmentManager.popBackStack(null, 0);
之后,在你的事件被完全处理之前,你的背书堆不是空的。
使用popBackStackImmediate()
立即在当前事件本身清空它。