【发布时间】:2015-08-20 19:19:56
【问题描述】:
我为 Android 编程已经有一段时间了,我仍在寻找解决方案来保留配置更改时的数据。除了在onSaveInstanceState 文档中将Parcelables 保存到Activity 的Bundle 之外,还建议使用Fragment 并将setRetainInstance 标志设置为true。
但是我刚刚遇到了一些使用onRetainCustomNonConfigurationInstance 来保存任意对象的代码(以一种奇特的方式,但本质上是没有引用Activity 等的大对象)。没见过用过这种方法,所以有些疑惑:
- 调用此方法来存储任意对象是否安全(从某种意义上说,我可以很确定它会被调用,并且不会很快被弃用/删除)?
- 此方法与
onRetainNonConfigurationInstance()有何不同,onRetainNonConfigurationInstance()也应该返回Object,本质上应该类似地工作? - 出于某种原因,使用保留片段是否更好?
作为奖励,我将不胜感激任何其他提示或解决方案来保存对象的状态,如 AsyncTask、Observable、视图的演示者并继续
【问题讨论】:
-
@JaredBurrows 感谢您的评论,但我认为这不仅不是最佳解决方案,而且在 Android 应用程序中处理状态丢失是错误且有害的方式。另外,它并不能真正解决问题(例如,在应用程序进入后台之后)
-
@JaredBurrows:我同意 wasyl,因为您的解决方案并没有真正解决任何问题。充其量,您可以将您的方法用作将自身锁定到某些特定屏幕方向的活动的优化。否则,您仍然必须处理所有其余的配置更改(例如,语言环境、汽车坞站)并且您现在必须大惊小怪地处理
onConfigurationChanged()方法中的每个单独的资源更改,以涵盖configChanges阻止正常活动销毁/重新创建周期的情况。 -
“它不会很快被弃用/删除”——它在图书馆里。您可以控制何时采用较新版本的库。 “此方法与 onRetainNonConfigurationInstance() 有何不同” --
onRetainNonConfigurationInstance()是final并且不能被覆盖,以确保FragmentActivity可以对其片段进行配置更改工作。onRetainCustomNonConfigurationInstance()是在活动级别参与的替代“钩子”。 “出于某种原因,使用保留片段是否更好?” -- 它可以在FragmentActivity以外的地方工作。 -
“两者都应该以类似的方式工作,对吗?” -- 只要两者都应该在配置更改中保留,是的。
标签: android android-activity android-fragmentactivity android-framework