Android 中 onSaveInstanceState的调用时机



Activity里的onSaveInstanceState()方法在Activity以不正常方式退出,且Activity在随后的时间内被系统杀死之后会调用这个方法让开发人员有机会存储Activity的相关信息,而且在下次返回Activity时恢复这些数据。

onSaveInstanceState并不是在每次Activity退出之前都会调用,只是在某些特定的情况下它才会调用,name这些特定的场景是怎样的呢?

这些特定的场景归结成一句话就是:当某个Activity变得容易被系统销毁时,该Activity的onSaveInstanceState函数被执行,除非该Activity是被用户主动销毁的,如当该用户按back键时。

意思就是,该Activity还没有销毁,而仅仅是一种可能性,这种可能性有这么几种可能情况。

  1. 当用户按下Home键时,这是显而易见的,系统不知道你按下Home键多久后要执行多少个应用,自然也不知道Activity 是否会被销毁,因此,系统会调用onSaveInstanceState,让用户有机会保存某些非永久性的数据。
  2. 长按Home选择运行其他程序时。
  3. 从Activity A中启动一个新的Activity时.(???)
  4. 屏幕方向切换时,如从竖屏切换到横屏时。
  5. 按下电源键时(关闭屏幕显示)。
  6. 电话打入等情况发生时。

一句话概括就是,不是用户主动退出某个Activity或者跳转到其他Activity的情况下就会触发onSaveInstanceState,换句话说,onSaveInstanceState的调用遵循一个重要的原则,即当系统存在“未经你许可”时销毁了我们的Activity,则onSaveInstanceState就会被系统调用,这是系统的责任,因为提供一个机会让用户保存数据。