onSaveInstanceState和onRestoreInstanceState翻译一下:保存实例状态.恢复实例状态俩个方法,并不常见.这俩个方法并不是生命周期方法,也就意味着他们不一定会被触发.
这俩个方法作用呢,就是保存数据.
在我们的App运行时,有可能会被一些意外情况中断运行,如内存不足崩掉了,不小心碰到HOME键了强制回到主页面.横竖屏切换也属于这种情况.需要注意的是按到返回键并不算是意外情况,他属于正常的对App的操作,一般的返回键都是销毁当前Activity,回到上一层.
理解:App遇到了意外Acticity被迫强制停止运行销毁. 调用方法.用户主动销毁不调用. 当前的一些状态数据可能会丢失,所以安卓提供一个保存临时数据的方法也就是onSaveInstanceState.
这里的onSaveInstance只可以保存临时性数据,至于持久化的数据保存则是在onPause.
理一下思路就是:在Activity被销毁之前,调用onSaveInstance方法保存每一个实例的状态,在Acticity重新回来时可以通过onCreate()方法里边的Bundle参数或者OnRestoreInstanceState()方法来恢复之前的状态. 可以发现onCreate()和OnRestoreInstanceState()的参数都是Bundle,显而易见这俩个都参数都可以获取到之前的状态数据.
而关于:onSaveInstanceState这个方法保存的数据类型,既然他的参数是Bundle那么他可以存放的数据也是可以有多种类型.可以通过bundle.put查看.
那么关于这个的核心流程就是通过在这俩个方法中通过Bundle数据的存取使用,来实现Acticity销毁前状态保存,再次回到界面时状态的恢复.
由此我们可以知道onSaveInstanceState方法一定是在onPause()之前的,因为OnPause()调用时,Activity的焦点多多少少失去了,并且部分Acticity已经不可见,实例状态会被影响.所以会在焦点还存在的来保存完整的状态.
onRestoreInstanceState会在onStart和onResume之间运行.
理解:Activity已经创建并且onStart也回调了,在进一步就是获取焦点显示完整页面,我们可以查看一个Acticity正常显示的声明周期:一般来说都是onCreate onStart onResume 到这就已经结束,这个Activity已经加载完成了 而OnRestoreInstanceState方法在onResume之前调用可能就是为了在获取焦点之前完成实例状态的恢复.
由于OnRestoreInstanceState的回调时机比较苛刻,他必须是肯定Activity是被系统销毁的,重新回来时才会调用.所以这也造成了OnsaveInstanceState方法和OnRestoreInstanceState方法不一定成对出现.
这俩个方法作用呢,就是保存数据.
在我们的App运行时,有可能会被一些意外情况中断运行,如内存不足崩掉了,不小心碰到HOME键了强制回到主页面.横竖屏切换也属于这种情况.需要注意的是按到返回键并不算是意外情况,他属于正常的对App的操作,一般的返回键都是销毁当前Activity,回到上一层.
理解:App遇到了意外Acticity被迫强制停止运行销毁. 调用方法.用户主动销毁不调用. 当前的一些状态数据可能会丢失,所以安卓提供一个保存临时数据的方法也就是onSaveInstanceState.
这里的onSaveInstance只可以保存临时性数据,至于持久化的数据保存则是在onPause.
理一下思路就是:在Activity被销毁之前,调用onSaveInstance方法保存每一个实例的状态,在Acticity重新回来时可以通过onCreate()方法里边的Bundle参数或者OnRestoreInstanceState()方法来恢复之前的状态. 可以发现onCreate()和OnRestoreInstanceState()的参数都是Bundle,显而易见这俩个都参数都可以获取到之前的状态数据.
而关于:onSaveInstanceState这个方法保存的数据类型,既然他的参数是Bundle那么他可以存放的数据也是可以有多种类型.可以通过bundle.put查看.
那么关于这个的核心流程就是通过在这俩个方法中通过Bundle数据的存取使用,来实现Acticity销毁前状态保存,再次回到界面时状态的恢复.
由此我们可以知道onSaveInstanceState方法一定是在onPause()之前的,因为OnPause()调用时,Activity的焦点多多少少失去了,并且部分Acticity已经不可见,实例状态会被影响.所以会在焦点还存在的来保存完整的状态.
onRestoreInstanceState会在onStart和onResume之间运行.
理解:Activity已经创建并且onStart也回调了,在进一步就是获取焦点显示完整页面,我们可以查看一个Acticity正常显示的声明周期:一般来说都是onCreate onStart onResume 到这就已经结束,这个Activity已经加载完成了 而OnRestoreInstanceState方法在onResume之前调用可能就是为了在获取焦点之前完成实例状态的恢复.
由于OnRestoreInstanceState的回调时机比较苛刻,他必须是肯定Activity是被系统销毁的,重新回来时才会调用.所以这也造成了OnsaveInstanceState方法和OnRestoreInstanceState方法不一定成对出现.