当前位置: 代码迷 >> 综合 >> onSaveInstanceState()和onRestoreInstanceState()调用机制
  详细解决方案

onSaveInstanceState()和onRestoreInstanceState()调用机制

热度:59   发布时间:2023-09-29 18:04:30.0

最近在解决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被回收了才会调用。