Android非正常结束时的生命周期

正常的Activity的生命周期中,当在一个oldActivity中启动一个新的newActivity时,先调用oldActivity的onPause方法,然后调用newActivity的onCreate-->onStart-->onResume,执行这三个方法之后,才开始执行oldActivity的onStop方法,所以在oldActivity的onPause方法中,不能进行耗时操作

1.第一种情况,资源相关的系统配置发生改变导致Activity被杀死并重新创建

Activity-->意外情况-->onSaveInstanceState-->onPause-->onStop-->onDestroy

重新启动时调用-->onCreate-->onStart-->onRestoreInstanceState,这两个方法中的savedInstanceState参数即保留这上次意外停止时的信息,

 

2.第二种情况,系统内存不足导致低优先级的Activity被杀死

低优先级的Activity会在内存不足时被杀死

优先级高:正在前台且可见的Activity

优先级中:不在前台,但是可见的Activity(如在Activity中弹出弹窗)

优先级低:不在前台不可见

 

需要注意的是onSaveInstanceState只有在非正常退出才会执行,且执行后再重启onRestoreInstanceState的参数一定有值,而onCreate的参数在首次启动时是没有值的,所以如果在onCreate中恢复数据时需要判空,官方建议在onRestoreInstanceState方法中恢复数据

 

 

第一种情况下,如果不想销毁Activity重新创建,则需要制定configChanges属性.常用的有:

locale:设备本地位置发生了改变,一般指切换了系统语言

orientation:屏幕方向发生了改变

keyboardHidden:键盘的可访问性放生了改变,比如用户调出了键盘

screenSize:屏幕尺寸发生了改变,当旋转屏幕时,屏幕尺寸也会发生改变,当编译选项中的minSdkVersion和tarSdkVersion都低于13时,此选项不会导致Activity重启,否则会导致Activity重启

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值