您的位置:首页 > 移动开发 > Android开发

Android异常情况下的生命周期分析

2017-09-20 19:28 429 查看

一、资源相关的系统配置发生改变导致Activity被杀死并重新创建

当系统配置发生改变后,Activity会被销毁,其onPause、onStop、onDestroy均会被调用,同时由于Activity是在异常情况下终止的,系统会调用onSaveInstanceState来保存当前Activity的状态。

onSaveInstanceState只会在Activity被异常终止的情况下调用,正常情况下系统不会回掉这个方法。这个方法调用的时机在onStop之前,它和onPause没有既定的时序关系,它既可能在onPause之前调用,也可能在onPause之后调用。

当Activity被重新创建后,系统会调用onRestoreInstanceState,并且把Activity销毁时onSaveInstanceState方法所保存的Bundle对象作为参数同时传递给onRestoreInstanceState和onCreate方法。

onRestoreIntanceState的调用时机在onStart之后。

系统只在 Activity 异常终止的时候才会调用 onSaveInstanceState 和
onRestoreIntanceState 来存储和恢复数据,其他情况下会触发这个过程。

onRestoreIntanceState和onCreate的区别:
onRestoreIntanceState 一旦被调用,其参数 Bundle savedInstanceState 一定是有值的,我们不用额外地判断是否为空;
onCreate 如果是正常启动的话,其参数 Bundle savedInstanceState
为null , 所以必须要额外判断。
但是官方文档建议是采用
onRestoreIntanceState 去恢复数据。


二、资源内存不足导致低幼优先级的 Activity 被杀死

1. Activity 按照优先级从高到低
(1) 前台
Activity ---- 正在和用户交互的 Activity,优先级最高
(2) 可见但非前台
Activity ---- 比如 Activity 中弹出了一个对话框,导致 Activity 可见但是位于后台无法和用户直接交互
(3) 后台
Activity ---- 已经被暂停的 Activity ,比如执行了 onStop ,优先级最低

2. 当系统内存不足时,系统就会按照上述优先级去杀死目标 Activity 所在的进程,并在后续通过
onSaveInstanceState 和 onRestoreIntanceState 来存储和恢复数据。

如果一个进程中没有四大组件在执行,那么这个进程将很快被系统杀死,比较好的方法是将后台工作放入 Service 中从而保证进程又一定的优先级,这样就不会轻易地被系统杀死。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息