有关 onSaveInstanceState() 那点事

Posted NoodleUtopia

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有关 onSaveInstanceState() 那点事相关的知识,希望对你有一定的参考价值。

有关 onSaveInstanceState() 那点事

我们都知道,按 home 键将 APP 压入后台时,会调用 onSaveInstanceState() 方法来保存当前状态,并可以在重新回到 APP 时恢复。最近做了一些保存和恢复 Activity/Fragment 状态的事,总结了一点经验教训。

Activity 与 Fragment 的 savedInstanceState 不能混用。即,在 Fragment 的 onSaveInstanceState() 方法中保存的 bundle,与在 Activity 的 OnCreate() 方法中得到的 bundle 没有关系,两者是独立的。但子类中可以通过重写onSaveInstanceState() 来补充父类中保存的 bundle,Activity、Fragment 皆然。

一些 View 的状态会自动保存和恢复,无需手动保存/恢复。比如 EditText 中输入的文字,按钮的选中状态等。需要注意的是:

  • 只有提供了 android:id 属性的 View 才会自动保存恢复;

  • View 的 visibility 等属性似乎并不会被自动恢复;

需要保存的是成员变量。Activity/Fragment 中每个成员变量都会被销毁,因此我们在 onSaveInstanceState() 中需要保存的是这些成员变量。

参考

https://inthecheesefactory.com/blog/fragment-state-saving-best-practices/en

以上是关于有关 onSaveInstanceState() 那点事的主要内容,如果未能解决你的问题,请参考以下文章

onSaveInstanceState

onSaveInstanceState() 和 onRestoreInstanceState()

onSaveInstanceState 的目的

android源码解析(二十四)-->onSaveInstanceState执行时机

如何将数据从 onCreate() 传递到 onSaveInstanceState()?

onSaveInstanceState 没有被调用