有关 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