【问题标题】:Why should I need setRetainInstance or onSaveInstance if I can use android:configChanges="keyboard|orientation|screenLayout"如果我可以使用 android:configChanges="keyboard|orientation|screenLayout" 为什么我需要 setRetainInstance 或 onSaveInstance
【发布时间】:2012-08-06 12:02:44
【问题描述】:

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

【问题讨论】:

    标签: android fragment


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 一件事,为什么 google 放 onRetainNonConfigurationInstance() 和 onSaveInstanceState()。它们之间有什么区别,如果我可以在 onSaveInstance 中保留任何对象,为什么 onRetainNonConfigurationInstance 存在
    • 你真的应该阅读文档,它有足够的细节。简而言之,onSaveInstanceState() 将在Bundle 中序列化事物,而您可以从onRetainNonConfigurationInstance() 返回一个“活动”实例,例如一个线程,甚至是一个活动。文档在通常的位置:developer.android.com/reference/android/app/…
    猜你喜欢
    • 2011-12-10
    • 2012-10-14
    • 1970-01-01
    • 2021-01-14
    • 1970-01-01
    • 2020-03-07
    • 1970-01-01
    • 2016-08-31
    相关资源
    最近更新 更多