旋转后,backstack 上的所有片段在 onSaveInstanceState 中都有空值

All fragments on backstack, have nulls in onSaveInstanceState, after rotation

旋转设备后,我们在后台堆栈或 fragmentSupportManager 中的任何片段都会激活 onSaveInstanceState。

但是,在第一次旋转之后,里面的所有内容都为空(所有变量)并且应用程序因空指针异常而崩溃。

我想知道为什么如果片段实际上被销毁为空(所有值都为空),为什么片段仍然存在并调用 onSaveInstanceState?

我的代码很深,有多个 base 类,presenter 类 从片段中提取了很多代码。我也只使用一个 Activity 并使用 fragmentTransaction.replace.

如果人们需要,我可以添加代码,但是有很多!我希望关于 backstack works/retains 它是碎片的方式有一些明显的或者我不理解的东西。

我看过但没有帮助的链接是

Will onSaveInstanceState be called on fragments in the back stack?
Once for all, how to correctly save instance state of Fragments in back stack?
Using onSaveInstanceState with fragments in backstack?
BackStack Fragments blank on rotation
Save state of fragments in backstack

我也有同样的问题。 假设我有 Frag A,调用 Frag B 当我从 Frag A 到达 Frag B 时,Frag A 存在于 backstack 上并且没有显示。在片段 B 中,在第一次轮换时,onSavedInstanceState() 被片段 A 调用并且它工作正常,因为返回堆栈上的片段 A 存在并且所有数据都在那里.. 当我在 Frag B 中再次旋转设备时,由于某些未知原因再次调用 Frag A onSavedInstanceState().. 在这些调用之间从未发出恢复,因为由于 Frag A 不可见而未调用 onCreateView。 为什么这样做我有 0 个线索。

我所做的是检查 Bundle 是否为空(并且在第二次旋转后 bundle 确实存在,它只是空的),如果是,我尝试从头开始重新创建 Frag,这意味着从请求中重新加载新数据...这不是最好的解决方案..