gpt4 book ai didi

android - 使用 `onRetainCustomNonConfigurationInstance` 跨配置更改保留数据

转载 作者:IT老高 更新时间:2023-10-28 22:22:31 29 4
gpt4 key购买 nike

我为 Android 编程已经有一段时间了,我仍在寻找解决方案来保留配置更改的数据。除了在 onSaveInstanceState 文档中将 Parcelable 保存到 Activity 的 Bundle 之外,还建议使用 FragmentsetRetainInstance 标志设置为 true。

但我刚刚遇到了一些使用 onRetainCustomNonConfigurationInstance 来保存任意对象的代码(以一种奇特的方式,但本质上是没有引用 Activity 等的大对象) .没见过用过这种方法,所以有些疑惑:

  • 调用此方法来存储任意对象是否安全(从某种意义上说,我可以肯定它会被调用,并且不会很快被弃用/删除)?
  • 此方法与 onRetainNonConfigurationInstance() 有何不同,后者也应该返回 Object,本质上应该类似地工作?
  • 出于某种原因,使用保留 fragment 是否更好?

作为奖励,我将不胜感激任何其他提示或解决方案来保存对象的状态,如 AsyncTaskObservable、 View 的演示者并继续

最佳答案

Is this method safe to call to store arbitrary objects (in a sense that I can be pretty sure it's gonna get called, and that it won't be deprecated/removed anytime soon)?

onRetainCustomNonConfigurationInstance() 是一种相对较新的方法,并未弃用。我真的认为它不会很快消失,因为没有理由仅仅为了删除它而引入新的东西。您可以放心使用。

How is this method different from onRetainNonConfigurationInstance(), which also should return Object, and in essence should work similarly?

onRetainNonConfigurationInstance() 总是返回内部 NonConfigurationInstances 类的实例,其中包含保留的 fragment 、加载器等状态。您不能(也不应该)更改此系统行为。这就是为什么该方法是 final 并且您不能覆盖它的原因。

如果你想保留你的自定义实例,你需要重写 onRetainCustomNonConfigurationInstance() 并从那里返回它。

实际上,onRetainNonConfigurationInstance() 调用 onRetainCustomNonConfigurationInstance() 并保留重新调整的实例以及保留 fragment 和加载器等其他状态。

Is using retained fragment still better, for some reason?

这取决于您的用例和偏好。逻辑可能是这样的。如果你的 Activity 只是控制 Fragment,没有其​​他特殊逻辑,那么使用 Retained Fragment 会更容易。如果您的 Activity 需要保留一些内容,那么您可以安全地使用 onRetainCustomNonConfigurationInstance() 方法。就目前而言,在这两种情况下,状态仍然由旧的和已弃用的 onRetainNonConfigurationInstance() 保留。方法。

附言关于存储状态的额外问题,我宁愿建议查看 onSaveInstanceState()方法。它用于存储状态。

更新: AndroidX release from November 5, 2018弃用了该方法,并附上以下注释:onRetainCustomNonConfigurationInstance 已被弃用。使用 ViewModel 来存储需要在配置更改后继续存在的对象。

关于android - 使用 `onRetainCustomNonConfigurationInstance` 跨配置更改保留数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30673331/

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