(转)onSaveInstanceState调用时机总结


转:https://www.jianshu.com/u/347890c1ed1e 文章


“onSaveInstanceState 会在系统意外杀死 Activity 时调用,或者横纵屏切换的时候调用”。

全局搜callActivityOnSaveInstanceState(:

可以看到调用这个方法的地方也就五个,而且都集中在ActivityThread里面。

先看第一个:

这是准备回调Activity的onPause的方法,可以看到在调用performPauseActivityIfNeeded之前,会先判断Activity是否已经finished还有targetSdkVersion(注意是targetSdkVersion,并不是SDK_INT)是否低于11(Android3.0),如果是的话,就会在Activity的onPause之前调用callActivityOnSaveInstanceState方法,这个方法最终会回调Activity的onSaveInstanceState:

其实shouldSaveState上面的那行注释也已经说明了,targetSdk低于11的app,会在onPause之前保存状态。

好,接着看下一个:

这次我们先看开头的注释:targetSdk低于28的app,会在onStop之前回调onSaveInstanceState,从targetSdk 28开始,onSaveInstanceState在onStop回调之后才回调,而低于11的app,永远都会在onPause之前回调。

代码逻辑跟注释说的无异。

总结:

Activity的onSaveInstanceState回调时机,取决于app的targetSdkVersion

targetSdkVersion低于11的app,onSaveInstanceState方法会在Activity.onPause之前回调;

targetSdkVersion低于28的app,则会在onStop之前回调;

28之后,onSaveInstanceState在onStop回调之后才回调。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。