onSaveInstanceState()和onRestoreInstanceState()调用机制

最近在解决Fragment重叠问题的时候用到这些方法,所以作了这篇文章,之后会在关于Fragment应用的文章中给出实例。

Android系统的回收机制会在未经用户主动操作的情况下销毁activity,而为了避免系统回收activity导致数据丢失,Android为我们提供了onSaveInstanceState(Bundle outState)onRestoreInstanceState(Bundle savedInstanceState)用于保存和恢复数据。用来保存状态信息的Bundle会同时传给两个method,onRestoreInstanceState() and onCreate().

 

一、onSaveInstanceState(Bundle outState)的调用

activity有可能被系统回收的情况下,而且是在onStop()之前。注意是有可能,如果是已经确定会被销毁,则onSaveInstanceState不会被调用。

二、onRestoreInstanceStateBundle savedInstanceState的调用

1onRestoreInstanceState(Bundle savedInstanceState)只有在activity确实是被系统回收,重新创建activity的情况下才会被调用。比如屏幕方向切换时,activity生命周期如下: onPause -> onSaveInstanceState -> onStop -> onDestroy -> onCreate -> onStart -> onRestoreInstanceState -> onResume

2因为onSaveInstanceState 不一定会被调用,所以onCreate()里的Bundle参数可能为空,如果使用onCreate()来恢复数据,一定要做非空判断。而onRestoreInstanceStateBundle参数一定不会是空值,因为它只有在上次activity被回收了才会调用。

猜你喜欢

转载自blog.csdn.net/qq_34490018/article/details/80069365
今日推荐