popBackStackImmediate与popBackStack之间的区别

32
请问有人能告诉我popBackStackImmediatepopBackStack之间的区别吗?我真的不明白,此外在第二个popBackStack中的"flag" 0(零)是什么意思?
非常感谢大家的帮助...
2个回答

34
popBackStackImmediate()会在调用时立即执行弹出命令,并可以在调用后立即验证结果。由于所有弹出操作都在调用中执行,因此速度略慢。

popBackStack()将在下一个事件循环周期(即下一个绘制阶段)内执行弹出命令。因此它与其他代码异步执行。这意味着在执行此操作后,FragmentTransaction不会从返回堆栈中移除。在大多数情况下,您不需要立即弹出FragmentTransaction,所以它会等待直到所有其他操作完成后再实际发生。所有这些都发生得非常快,用户几乎察觉不到。

结尾处的标志与前面内容无关。它目前只能设置为POP_BACK_STACK_INCLUSIVEFragmentManager允许您在返回堆栈上设置ID。如果设置了标志,则它将弹出与指定ID匹配的FragmentTransaction,直到达到不匹配ID的事务或到达底部。如果未设置标志,则弹出所有不匹配ID的FragmentTransaction,直到达到匹配ID的事务或到达底部。


16

popBackStack() 函数会弹出后退栈,但不会立即执行,而是发送一条消息来执行,因此您无需等待繁重的操作。

popBackStackImmediate() 会在函数返回之前立即执行。 这样做速度较慢并可能导致性能问题。 如果可能,应使用非即时版本。

第二个参数为0表示使用默认行为(删除后退栈中的顶部元素)。 您还可以将其传递给一系列布尔OR标志。 目前仅支持一个标志POP_BACK_STACK_INCLUSIVE,它会更改为删除多个片段。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接