4

为什么我需要使用setRetainInstance()onSaveInstance()保存状态,我可以使用android:configChanges="keyboard|orientation|screenLayout"和获得相同的“保存状态非 UI 状态”?我的意思是减少头痛。

4

1 回答 1

7

不要使用android:configChanges. 它会以微妙的方式破坏事物,并阻止 Android 为当前配置获取正确的布局/主题/尺寸等。

onSaveInstanceState()与此完全正交:您需要保存状态,以便在 Android 杀死您的进程以节省内存时恢复它。configChagnes仅防止它重新创建旋转活动、键盘状态更改等。

setRetainInstance()用于您不希望在设备旋转等时重新创建的片段。如果您不调用它,Android 将在 Bundle 中序列化它们的状态,并与父活动一起重新创建它们。

简而言之,虽然configChanges看起来是一条“捷径”,但它不是。不要依赖它,并根据需要使用适合每种情况的工具来保存/恢复状态。

于 2012-08-06T03:51:21.503 回答