上一个问答每日一问 | Activity与Fragment的那些事,“用起来没问题,我都要走了,你崩溃了?” 其实离不开 onSaveInstanceState方法被调用的关系。
记得很久以前总记得:“onSaveInstanceState 会在系统意外杀死 Activity 时调用,或者横纵屏切换的时候调用”。
问题是:
- 随着Android SDK版本的变化,这一方法的调用时机有哪些变化?
更多问答 >>
-
每日一问 | Android P 上,需要配置 network_security_config ,才能抓包,正确吗?
2020-06-29 21:26 -
2020-07-08 23:05
-
每日一问 | RecyclerView的多级缓存机制,每级缓存到底起到什么样的作用?
2020-07-19 23:56 -
每日一问 | 比 removeView 更轻量的操作,你了解过吗?
2020-07-27 01:14 -
每日一问| View 绘制的一个细节,如何修改 View 绘制的顺序?
2020-08-12 10:21 -
2020-06-09 23:17
-
每日一问 | Activity与Fragment的那些事,“用起来没问题,我都要走了,你崩溃了?”
2020-06-22 00:39 -
2020-06-07 20:55
-
每日一问 在 Java 支持了 switch(字符串)之后,只是语法糖而已?
2020-06-01 00:55 -
2020-05-25 23:08
全局搜
callActivityOnSaveInstanceState(
:onPause
的方法,可以看到在调用performPauseActivityIfNeeded
之前,会先判断Activity是否已经finished还有targetSdkVersion(注意是targetSdkVersion,并不是SDK_INT)是否低于11(Android3.0),如果是的话,就会在Activity的onPause
之前调用callActivityOnSaveInstanceState
方法,这个方法最终会回调Activity的onSaveInstanceState
:shouldSaveState
上面的那行注释也已经说明了,targetSdk低于11的app,会在onPause
之前保存状态。好,接着看下一个: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
回调之后才回调。大佬,为什么你全局能搜索到ActivityThread中的内容,我只能搜到Instrumentation中的代码
问一下,怎么找到搜索 callActivityOnSaveInstanceState 这个关键词的?
对应的生命周期调用处都是callActivityOn开头的
对8起,那天忘记回复了
@vice 『CTRL + SHIFT + F』call出『Find in Path』窗口,在输入框下面那四个选项中选最后一个『Scope』,旁边的下拉选项选『All Places』,然后输入关键词就 ...查看更多
@vice 『CTRL + SHIFT + F』call出『Find in Path』窗口,在输入框下面那四个选项中选最后一个『Scope』,旁边的下拉选项选『All Places』,然后输入关键词就能搜到了
谢谢大佬。学到了~
谢谢
Activity可能被意外杀死之前调用。
这大概就和买保险一样,之前确定绝症了保险不报