正在加载一言...
0%

Activity的生命周期

典型情况下的生命周期分析
(1)onCreate() 表示Activity正在被创建 做一些初始化操作

(2)onRestart() 表示Activity正在重新启动 从不可见重新变为可见状态 这种情况一般是用户行为导致的 比如用户按HOME键切换到桌面或者用户打开了一个新的Activity这时当前的Activity就会暂停 也就是onPause和onStop被执行了接着用户又回到这个Activity就会出现这种情况

(3)onStart() 表示Activity正在被启动 即将开始 这是Activity已经可见 但还没出现在前台 还无法与用户交互

(4)onResume 表示Activity已经可见了 并出现在前台并已经开始活动

(5)onPause 表示Activity正在停止 正常情况下onStop就会被调用 特殊情况下 如果这个时候快速回到当前Activity那么onResume会被调用 onPause必须先执行完新Activity的onResume才会执行

(6)onStop 表示Activity即将停止

(7)onDestroy 表示Activity即将被销毁

Activity生命周期的切换过程

(1)针对一个特定的Activity第一次启动 onCreate ->onStart->onResume
(2)当用户打开新的Activity或者切换到桌面的时候 onPause->onStop
(3)当用户再次回到原Activity时 onRestart->onStart->onResume
(4)当用户back键回退时 onPause-> onStop->onDestroy
(5)当Activity被系统回收后再次打开 生命周期回调过程和(1)一样
(6)从整个生命周期来说 onCreate和onDestroy是配对的 分别标识着Activity的创建和销毁并只可能有一次调用
从Activity的是否可见来说onStart和onStop是配对的随着用户的操作或者设备的屏幕点亮和熄灭这两个方法可能被调用多次
从Activity是否在前台来说 onResume和onPause是配对的随着用户操作或者设备的点亮和熄灭这两个方法可能被调用多次

当新启动一个Activity的时候旧Activity的onPause会先执行然后才会启动新的Activity

异常情况下的生命周期分析
情况1 资源相关的系统配置发生改变导致Activity被杀死并重新创建
当系统配置发生变化后Activity会被销毁 其 onPause onStop onDestroy均会被调用
用于Activity被异常终止的 系统会调用onSaveInstanceState保存当前Activity状态
在重新创建后系统会调用onRestoreInstanceState并把Activity销毁时onSaveInstanceState方法保存的Bundle对象作为参数同时传递给onRestoreInstanceState和onCreate

onSaveInstanceState在onStop之前调用 和onPause没有时序的关系
onRestoreInstanceState在onStart之后调用

情况2资源内存不足导致低优先级的Activity被杀死
数据存储和恢复过程和情况1完全一致
Activity优先级
(1)前台Activity—–正在和用户交互的Activity优先级最高
(2)可见非前台Activity—–比如Activity中弹出一个对话框 导致Activity可见但是位于后台无法和用户直接交互
(3)后台Activity—-已经被暂停的Activity比如执行了onStop 优先级最低

不想系统重新创建Activity就可以给Activity指定configChanges属性
android:configChanges=”orientation”

configChanges的项目和含义