onSaveInstanceState:保存当前焦点实例状态
onRestoreInstanceState:还原保存的实例状态
本文主要是记录一下onSaveInstanceState和onRestoreInstanceState的运行时间和作用,博主刚写到这个,各种研究后总结了一下,下面做一下简要的说明:
onSaveInstanceState什么时候被执行:
这个方法主要在“未经用户允许”的情况,activity的生命周期状态为暂停或停止的情况下会使用,下面举几个例子说明:
- 当在Activity-A中打开一个Activity-B(不管B是否完全覆盖A的界面)的时候,会使用该方法,因为你点击了A上的打开B按钮,并没有允许A退出。未经用户允许
- 当翻转屏幕的时候,程序会执行onPause->onStop->onDestroy->onCreate->onStart->onResume的操作,未经用户允许进行了onStop的销毁操作
- 当直接按了home键,直接跳出程序的时候,也是未经用户运行执行了onStop操作
目前就想到以上这三种情况,总而言之,只要是未经过用户允许,程序自动运行onPause或onStop操作的情况就会执行onSaveInstanceState方法。该方法运行在onStop方法之前,当不保证是在onPause之前还是之后。
什么是经用户运行呢?比如你自己按了退出(返回)按钮,这就是用户允许
onSaveInstanceState的作用:
保存当前所有实例的状态,即当程序未经用户允许的情况下被退出时,以便还原各实例的当前运行状态而进行的保存操作。
onRestoreInstanceState什么时候被执行:
- 各实例状态被onSaveInstanceState方法保存
- 程序被停止并重新初始化,即重新调用了onStop和onCreate方法
满足以上两个条件就会调用onRestoreInstanceState,下面举两个例子:
- 翻转屏幕的时候,保存了state,并重新初始化,满足以上两个条件
- 按了home键,程序被onStop,保存了state,并因为其他程序的资源抢占,导致该进程被杀死,重新启动该程序(onCreate)的时候会执行该方法
下面再说一个onRestoreInstanceState的特殊案例:当通过activity-A打开一个使A处于暂停状态的activity-B时,这时候会调用onSaveInstanceState方法,这时候直接杀死A的进程的话,A会自动还原数据并重启,再杀死的话继续这样的操作,连续3次之后若再被杀死,则A不再重启,只有背景是黑色的B了。
onRestoreInstanceState方法与onSaveInstanceState并不是成对出现的。而且这两个方法记录实例状态的时候是通过R资源文件中的id来记录的。
【以上纯属个人研究所得,若有错误,欢迎交流指正,谢谢!】