异常情况下的Activity生命周期

异常情况

1. 内存不足

Activity按优先级从高到低,分为以下三种:

(1)前台Activity——交互中的Activity
(2)可见但非前台Activity——比如Activity中弹出一个对话框
(3)后台Activity——被暂停的Activity,比如执行了onStop();

内存不足时,系统会按照以上优先级去杀死目标Activity所在的进程,如果一个进程中没有四大组件在执行,那么这个进程将很快被系统杀死。

2. 资源相关的的系统配置发生改变

进行旋转屏幕等操作时会导致系统配置发生变化,Activity重新创建。

系统的数据保存与恢复机制

上述1、2情况,Activity异常终止时,系统都会调用onSaveInstanceState方法来保存当前Activity的状态到一个Bundle对象中,在Activity被重新创建后,该Bundle对象将作为参数同时传递给onCreate和onRestoreInstanceState方法,我们可以在这两个方法中进行数据恢复操作。
注意:在onCreate方法中操作Bundle对象时需要对其进行判空,因为Activity正常退出时,不会有Bundle对象。
而onRestoreInstanceState方法一旦被调用,Bundle对象一定是有值的,不用再额外判空。

阻止Activity被重新创建

对于上述情况2,我们可以通过在AndroidMenifest.xml的对应activity标签指定configChanges属性,阻止Activity重新创建。常用的值有以下几个:

android:configChanges="orientation|keyboardHidden|local"

上述3个值分别表示:
*屏幕旋转
*键盘的可访问性变化,比如用户调出了键盘
*设备的本地位置变化,一般指切换了系统语言

指定了这3个值,当发生这3种变化时,该Activity不会被重新创建。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值