Android的savedInstanceState
在一个Activity的onCreate()方法中总是会看见一个
public void onCreate(Bundle savedInstanceState)
这个savedInstanceState是用来保存Activity的当前状态的。
Activity中有两个方法
onSaveInstanceState():遇到由系统销毁一个Activity时(内存不足,怒按了HOME键,长按HOME键,锁屏,启动一个新的activity,屏幕方向切换时),此方法就会被调用,但是用户自己销毁(怒按Back返回键),此方法就不会被调用,毕竟是你主动销毁的,所以系统一傲娇,就不会保存状态。
onRestoreInstanceState():Activity以及被销毁了才会调用,若是仅仅只有可能被销毁但是没有被真正销毁的话,此方法是不会被调用的。假如你点击了HOME键回到桌面,马上又返回到刚才的Activity,这个情况下刚才的Activity并没有被销毁,则此方法没有被执行。
onSaveInstanceState():onPause()或onStop()方法之前调用
onRestoreInstanceState():在onStart()和onPostCreate(Bundle)之间调用。
Activity的其他销毁可能
除了内存不足之外,还有可能因为改变屏幕方向,改变设备的语言设定,键盘的弹出等等都有可能。
在Activity之间的跳转操作的时候,其中有一些为了获得系统中的资源或者某一些信息,一般通过启动Activity中startActivity()和startActivityForResult()函数来进行操作。在这个操作的时候,Activity失去焦点,不可操作,此时,既可以通过OnSaveInstanceState()方法来保存一些暂时的数据。当又回到先前的Activity,重新获取了焦点,系统就触发了onRestoreInstanceState()方法,可以获取失去焦点前的某一些数据。
而 public void onCreate(Bundle savedInstanceState) 中savedInstanceState这个对象,当再次获取焦点以后就是通过来保存状态信息的Bundle会同时传给两个method,即onRestoreInstanceState() and onCreate().