【发布时间】:2012-08-06 12:02:44
【问题描述】:
为什么我需要使用setRetainInstance() 或onSaveInstance() 来保存状态,而我可以使用android:configChanges="keyboard|orientation|screenLayout" 并获得相同的东西“保存状态非UI 状态”?我的意思是减少头痛。
【问题讨论】:
为什么我需要使用setRetainInstance() 或onSaveInstance() 来保存状态,而我可以使用android:configChanges="keyboard|orientation|screenLayout" 并获得相同的东西“保存状态非UI 状态”?我的意思是减少头痛。
【问题讨论】:
不要使用android:configChanges。它会以微妙的方式破坏事物,并阻止 Android 为当前配置获取正确的布局/主题/尺寸等。
onSaveInstanceState() 与此完全正交:您需要保存状态,以便在 Android 杀死您的进程以节省内存时恢复它。 configChagnes 只阻止它在旋转、键盘状态更改等时重新创建活动。
setRetainInstance() 用于您不希望在设备旋转等时重新创建的片段。如果您不调用它,Android 将在 Bundle 中序列化它们的状态,并与父级一起重新创建它们活动。
简而言之,虽然configChanges 似乎是一条“捷径”,但实际上并非如此。不要依赖它,并根据需要使用适合每种情况的工具来保存/恢复状态。
【讨论】:
onSaveInstanceState() 将在Bundle 中序列化事物,而您可以从onRetainNonConfigurationInstance() 返回一个“活动”实例,例如一个线程,甚至是一个活动。文档在通常的位置:developer.android.com/reference/android/app/…