onRestoreInstanceState和onSaveInstanceState

测试方式很简单,只要想象一下就明白了:


经测试,onSaveInstanceState会被调用的条件是:

条件一.从当前activityA启动ActivityB时,在onPause之后onStop之前调用,

条件二.当前activtiy未被主动销毁(比如调用finish()),而是被压入栈中。


经测试:onRestoreInstanceState调用的条件

onSaveInstanceState被调用是为了保存数据,然而这并不意味着onRestoreInstanceState会被调用,那么,什么时候会被调用呢。

前面说过,当前ActivityA启动了ActivityB时onSaveInstanceState会被调用,也就是说activityA状态被保存了,ActivityA被压在栈中了,只有ActivityB活跃着,据此暗示,当ActivityB发生意外异常,只导致Activity被Kill后,ActivityA没有被kill时,这是ActivityA会再次重建,在这次重建过程中才会调用自己的onRestoreInstanceState。

测试结果说明了这一点,但是,ActivityB的意外事故严重性也决定了ActivityA中的onRestoreInstanceState,意外越严重的话,app直接闪退,因此不会调用.

所以得出如下条件:

条件一:当前Activity所在栈的上一层Activity发生警告性,低级别异常,导致上一层栈中的activity被kill,未导致app退出

条件二:当前activity必须未被kill掉,但当前activity会自动重建,这是必然调用OnRestoreInstance(当然调用一位这状态的重建,生命周期变成了OnCreate->OnStart->OnRestoreInstance)


总结:Activity所在的进程重新启动(比如屏幕切换,进程被异常kill后的重启过程中会调用OnRestoreInstance










你可能感兴趣的:(onRestoreInstanceState和onSaveInstanceState)