在说这个问题之前,要先了解下onSaveInstanceState是怎么设计的,又是怎么运行的,如何利用InstanceState保存和恢复数据。
首先介绍Fragment 里的onSaveInstanceState这个方法顺便介绍下onRestoreInstanceState方法,一些朋友可能在Android开发过程中很少使用,但是有时候掌握其用法会帮我们起到非常好的效果,尤其是在应用程序在不知道的情况下退出,如何实现其数据保存的功能。
1.基本作用:
onSaveInstanceState 方法并不是生命周期方法,他们不同于onCreate()、onPause()等生命周期方法,它们并不一定会被触发。当应用遇到意外情况(如:内存不足、用户直接按Home键)这时系统将要销毁这个Activity时,onSaveInstanceState() 此时会被调用。但是当用户主动去销毁一个Activity时,例如在应用中按返回键,onSaveInstanceState()就不会被调用。因为在这种情况下,用户的行为决定了不需要保存Activity的状态。通常onSaveInstanceState()只适合用于保存一些临时性的状态。而onPause()适合用于数据的持久化保存。而当activity被创建时,我们可以通过onCreate(Bundle)或者onRestoreInstanceState(Bundle) 里面的参数 Bunndle来得到之前保存的临时状态和数据以便我们做数据恢复。
例如,如果activity B启用后位于activity A的前端,在某个时刻activity A因为系统回收资源的问题要被杀掉,A通过onSaveInstanceState将有机会保存其用户界面状态,使得将来用户返回到activity A时能通过onCreate(Bundle)或者onRestoreInstanceState(Bundle)恢复界面的状态。
关于onSaveInstanceState (),是在函数里面保存一些View有用的数据到一个Parcelable对象并返回。在Activity的onSaveInstanceState(Bundle outState)中调用View的onSaveInstanceState (),返回Parcelable对象,
接着用Bundle的putParcelable方法保存在Bundle savedInstanceState中。
当系统调用Activity的的onRestoreInstanceState(Bundle savedInstanceState)时,通过Bundle的getParcelable方法得到Parcelable对象,然后把该Parcelable对象传给View的onRestoreInstanceState (Parcelable state)。在的View的onRestoreInstanceState中从Parcelable读取保存的数据以便View使用。