onSaveInstanceState()和onRestoreInstanceState()

onSaveInstanceState(Bundle outState)在什么时机会被调用? 

onSaveInstanceState(Bundle outState)会在以下情况被调用: 
1、按下HOME键时。 
2、从recent中选择运行其他的程序时。 
3、按下power键时。 
4、一个activity启动一个另一个activity时。 
5、屏幕方向切换时。

onRestoreInstanceState什么时机被调用? 

onRestoreInstanceState(Bundle savedInstanceState)只有在activity确实是被系统回收,重新创建activity的情况下才会被调用。

屏幕方向切换时,activity生命周期如下:

onPause -> onSaveInstanceState -> onStop -> onDestroy -> onCreate -> onStart -> onRestoreInstanceState -> onResume 

按HOME键,activity生命周期如下:

onPause -> onSaveInstanceState -> onStop -> onRestart -> onStart -> onResume 
因为activity没有被系统回收,因此onRestoreInstanceState没有被调用。

onCreate()使用Bundle参数恢复数据,和onRestoreInstanceState有什么区别?

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

而且onRestoreInstanceState是在onStart()之后被调用的。所以需要onCreate()中做一些初始化完成之后再恢复数据,用onRestoreInstanceState会比较方便。

用onRestoreInstanceState方法恢复数据,可以决定是否调用父类的onRestoreInstanceState方法super.onRestoreInstanceState(savedInstanceState); 而用onCreate()恢复数据,你必须调super.onCreate(savedInstanceState); 
否则运行会报如下错误:android.util.SuperNotCalledException: Activity {com.example.test/com.example.test.SecondActivity} did not call through to super.onCreate()
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值