Activity异常情况下声明周期分析

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

      最简单的例子:当我们把一张图片放在drawable目录后,就可以通过Resource去获取这张图片,同时为了兼容不同的设备,我们可能还需要在其他一些目录放置不同的图片,比如:drawable-mdpi,drawable-hdpi,drawable-xhdpi等。这样,当程序启动时,系统就会根据当前设备的情况去加载合适的Resource资源,比如横屏手机和竖屏手机会拿到 两张不同的图片(设定了landscape或者portrait状态下的图片),如果屏幕突然从竖屏转变为横屏,由于系统配置发生了改变,在默认情况下,Actvity就会被销毁并且重新创建,当然我们也可以阻止系统重新创建我们的Activity。

      当系统配置发生变化后,Activity会被销毁,activity在异常情况下终止时,系统会调用onSaveInstanceState来保存当前Activity的状态,当activity被重新创建之后,系统会调用onRestoreInstanceState,并且把Activity销毁时onSaveInstanceState方法所保存的Bundle对象作为参数同事传递给onRestoreInstanceState和onCreate方法。

情况2,资源内存不足导致低优先级的Activity被杀死

      这种情况不太好模拟,但是其数据存储和恢复过程和情况1完全一致,当系统内存不足时,系统会根据Activity优先级(前台Activity,可见但非前台Activity(对话框弹出),后台Activity)去杀死目标activity所在的进程。如果一个进程中没有四大组件在执行,那么这个进程将很快被系统杀死,因此,一些后台工作不合适脱离四大组件而独立运行在后台中,这样进程很容易被杀死,比较好的方法就是将后台的工作放入Service中从而保证进程也有一定的优先级,这样就不会轻易地被系统杀死。

如果当系统配置发生改变后,要Activity不重新创建,那么就要给Activity指定configChanges属性添加orientation这个值,我们常用的有locale、orientation和keyboardHidden这三个选项,需要注意的是,screenSize和smallestSreenSize,这两个比较特殊,她们的行为和编译选项有关,与运行环境无关。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值