popBackStackImmediate与popBackStack之间的区别

时间:2017-06-20 14:17:18

标签: android

有人可以告诉我popBackStackImmediatepopBackStack之间的区别吗?我真的没有得到它,另外什么是“标志”0(零)意味着在popBackStack的第二个?

非常感谢你的帮助......

2 个答案:

答案 0 :(得分:16)

like twice将立即在通话中执行弹出命令。结果可以在通话后立即验证。由于所有弹出操作都在通话中执行,因此速度稍慢。

popBackStackImmediate()将在下一个事件循环周期(即下一个绘制阶段)内执行弹出命令。所以它与其余代码异步。这意味着在执行此操作后,{strong} 将从后台堆栈中删除popBackStack()。在大多数情况下,你不会需要 FragmentTransaction立即弹出,所以它会等到其他所有内容都实际发生之前完成。所有这些都发生得如此之快,以至于用户无法识别它。

最后的旗帜是无关的。目前只能将其设置为POP_BACK_STACK_INCLUSIVEFragmentTransaction允许您在Backstack上设置ID。如果您设置了标志,那么它将弹出与指定ID匹配的FragmentManager,直到有一个与ID不匹配或达到底部。如果未设置该标志,则会弹出与该ID不匹配的所有FragmentTransaction,直到到达与ID匹配或达到底部的符号为止。

答案 1 :(得分:7)

popBackStack()会弹出后台,但它不会稍稍执行弹出 - 它会发布一条消息来执行此操作,因此您不必等待重量级操作发生。

popBackStackImmediate()在函数返回之前立即执行。它较慢并且可能导致性能问题。尽可能使用非立即版本。

0作为第二个参数意味着使用默认行为(删除backstack中的top元素)。您还可以传递一系列布尔ORed标志。目前唯一支持的标志是POP_BACK_STACK_INCLUSIVE,它会将其更改为删除多个片段。