如果我向片段后栈添加一个新事务(添加片段,不删除),是否复制或使用了先前事务中的片段对象

If I add a new transaction(adding fragment, no removing) to the fragment backstack, do the fragment objects in previous transaction get copied or used

假设我的第一笔交易是添加片段 A,添加到后台堆栈,然后提交。

对于我的第二个事务,我添加片段 B,添加到后台堆栈,然后提交。

在我第二次交易后的这一点上,我同时拥有片段 A 和片段 B。 Fragment A 是否仍然引用我在第一笔交易中创建的同一个 Fragment A 对象或它的副本?

我在某处读到说每次交易后,都会创建片段的快照,只有复制现有片段对我来说才有意义,这样旧快照就不会被新快照弄乱。

具体是如何工作的?

使用 addToBackStackFragmentTransaction 仅记录有关操作的最少信息 - 在您的情况下,添加的片段以及它是 'add' 操作的事实。 FragmentManager 绝对不会执行任何快照类型的行为。

这有两种用法:

  1. 执行FragmentTransaction。 'add' 操作不会影响其他 Fragment(因此当您添加 Fragment B 时 Fragment A 不会更改)。
  2. 当您弹出后退堆栈(即点击系统后退按钮)时,操作相反 - 'add' 操作变为 'remove' 操作。对于'remove'操作,没有其他Fragment被改变(所以当你pop Fragment B时Fragment A仍然存在)

当然还有其他的操作,比如'replace'影响两个Fragment(你可以认为是旧Fragment的一个'remove'和新Fragment的一个'add') .