如果我可以使用android:configChanges ="keyboard | orientation | screenLayout",为什么我需要setRetainInstance或onSaveInstance?

use*_*o01 4 android fragment

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

Nik*_*kov 7

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

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

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

简而言之,虽然它configChanges似乎是一种"捷径",但事实并非如此.不要依赖它并根据需要使用适当的工具保存/恢复状态.