gpt4 book ai didi

android - 什么时候提交 FragmentTransaction 是安全的?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:35:39 27 4
gpt4 key购买 nike

根据docs

A fragment transaction can only be created/committed prior to an activity saving its state. If you try to commit a transaction after Activity.onSaveInstanceState() (and prior to a following Activity.onStart or Activity.onResume(), you will get an error.

我可以理解Activity.onSaveInstanceState()之后 fragment 事务不能提交的第一部分, 因为如果 Activity 需要恢复,提交后的状态可能会丢失。

但我不明白为什么我们不能在 Activity.onStart 或 Activity.onResume() 之前提交 fragment 事务? oncreate() 也是先于Activity.onStart 或Activity.onResume() 的。难道我们连oncreate() 里commit 都做不到吗?

最佳答案

这里的关键是您不能在调用 onSaveInstanceState() 之后提交事务,在调用之后 onStart()onResume()

您可以在初始 onCreate() 和后续 onStart()onResume() 上提交事务,因为没有状态。

但是,如果 Activity 正在恢复其状态(即之前调用了 onSaveInstanceState(),并且 Activity 正在使用该状态重新创建自身,则您无法执行 Fragment 事务。这是因为如果您在 Activity 恢复之前的 Fragment 状态之前提交 Fragment 事务,您最终会遇到不清楚自己处于什么状态的情况。保存的状态是否优先于您通过提交 Fragment 事务创建的新状态,还是新事务应该优先于保存的状态?

检查这种情况的最简单方法是检查传递给 onCreate() 和其他生命周期方法的 savedInstanceState 包是否为 null。如果它为空,则没有保存的状态,您可以安全地执行您的交易。如果它不为空,则说明存在您可能想要保留的已保存状态。

关于android - 什么时候提交 FragmentTransaction 是安全的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40490424/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com