Android之“横竖屏切换生命周期的执行过程”

在Android开发的过程中,有时候会考虑到横竖屏切换的情况,如果放开了横竖屏切换,就要注意了,此时要多任务栈中的activity做一些谨慎操作。

在AndroidManifest.xml文件中,设置activity的属性时有一项"android:configChanges=""  ",可以配置它的属性;其中可选的有"orientation"  ,"orientation | keyboard"  

1、当不添加android:configChanges=""的配置的时候

按ctrl+f12切成横屏,activity的生命周期执行过程:onSaveInstanceState-->onPause-->onStop-->onDestroy-->onCreate-->onStart-->onRestoreInstanceState-->onResume

注意:onSavedInstanceState是一个系统方法,它不会在任何方法中执行,当按下Home键或者断点时触发(腾讯面试时他问我onSavdInstanceState会在哪个方法中执行,坑啊)

再次按ctrl+f12切成竖屏,activity的生命周期执行过程:onSavedInstanceState-->onPause-->onStop-->onDestroy-->onCreate-->onStart-->onRestoreInstanceState-->onResume-->onSaveInstanceState-->onPause-->onStop-->onDestroy-->onCreate-->onStart-->onRestoreInstanceState-->onResume

可以看到,在竖屏切换到横屏的时候,调用一次生命周期过程;在横屏切换到竖屏的时候,执行两次生命周期过程

2、设置android:configChanges="orientation"

切换到横屏:onSaveInstanceState-->onPause-->onStop-->onDestroy-->onCreate-->onStart-->onRestoreInstanceState-->onResume

横屏切换到竖屏:onSaveInstanceState-->onPause-->onStop-->onDestroy-->onCreate-->onRestoreInstanceState-->onResume-->onConfigurationChanged

可以看到:设置了android:configChanges="orientation",横竖屏切换时,生命周期只调用一次,唯一的区别是在横屏切换到竖屏时,会调用onConfigurationChanged()方法。

3、设置android:configChanges="orientation | keyboardHidden"

将竖屏切换为横屏:onConfigurationChanged-->

将横屏切换为竖屏:onConfigurationChanged-->

可以看到:设置了android:configChanges="orientation | keyboardHidden",横竖屏切换的过程中,只会执行onConfigurationChanged()方法。

补充:2018-12-21

onSavedInstanceState()onRestoreInstanceState()并不是activity生命周期的方法。

onSaveInstanceState()会在onPause()或onStop()之前执行,onRestoreInstanceState()会在onStart()和onResume()之间执行。

当应用遇到意外情况(内存不足,用户直接按home键)由系统直接销毁一个Activity时,onSaveInstanceState()就会调用,但是当用户主动销毁activity,如按back键,或直接执行finish(),这种情况下onSaveInstanceState()就不会执行,因为这种情况下,用户的行为决定了不需要保存Activity的状态。

那么onRestoreInstanceState()会跟onSaveInstanceState()成对出现吗?  答案是不会成对出现,onSaveInstanceState()需要调用的时,activity可能销毁,也可能没有销毁,只有在activity销毁重建的时候onRestoreInstanceState()才会调用。

在onSaveInstanceState()中默认情况下具体干些什么?

默认情况下默认会自动保存Activity中的某些状态,比如activity中各种UI的状态,因此在activity被“系统”销毁和重建的时候,Ui的状态会默认保存,但是前提条件是Ui控件必须指定id,如果没有指定id的话,UI的状态是无法保存 的。

总结下Activity数据的保存和恢复:

activity中保存数据有两种方式onPause(),onSaveInstance(bundle),  恢复数据也有两种途径onCreate(Bundle), onRestoreInstanceState(budle),默认情况下onSaveInstanceSate()和onRestoreInstanceState()会对UI状态进行保存和恢复,如果需要保存其他数据可以在onSaveInstanceState(),onPause()保存,但是如果是持久化的数据得通过onPause()保存(google推荐)。

 

 

 

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值