Activity 的存在状态
-
running
Activiy 位于屏幕前台,并且具有用户焦点
-
paused
另一个 Activity 位于屏幕前台,并且具有用户焦点,但此 Activity 仍然可见
-
stopped
Activity 被另一个 Activity 完全覆盖
-
killed
Activity 被销毁
| 状态 | 是否存在 | 是否可以交互 | 是否可见 |
|---|---|---|---|
| running | 是 | 是 | 是 |
| paused | 是 | 否 | 是 |
| stopped | 是 | 否 | 否 |
| killed | 否 | 否 | 否 |
注:当Activity内存不足时,会首先关闭 stoped 状态的 Activity,其次才会关闭 Paused 状态的 Activity
Activity 的生命周期
-
正常生命周期
正常生命周期是指:在正常情况下运行,经过用户操作的情况下的生命周期的改变

onCreate(): 首次创建 Activity 时调用,可以在此方法中执行“全局”状态设置,如调用 setContentView() 设置布局,或者将数据绑定到列表等
onRestart(): 在 Activity 已停止并即将再次启动前调用,一般 Activity 状态由不可见转为可见,此方法会被调用
onStart(): 在 Activity 对用户可见之前调用,Activity 可见但不可交互
onResume(): 在 Activity 开始与用户进行交互之前调用,Activity可以交互,具有用户焦点
onPause(): 在 Activity 正在停止时调用,此方法通常用于保存数据,停止动画以及其他可能消耗 CPU 的内容,它应该非常迅速地执行所需操作,因为它返回后,下一个 Activity 才能继续执行
onStop(): 在 Activity 对用户不再可见时调用,表示 Activity 即将停止,可以做轻量级回收工作
onDestroy(): 在 Activity 被销毁前调用,这是 Activity 收到的最后调用,当 Activiy 调用了 finish() 或者 系统销毁了 Activity 的实例时,会调用此方法,一般用于回收工作和资源的释放
- Activity 正常启动:onCreate() -> onStart() -> onResume()
- 按下 Home 键时:onPause -> onStop()
- 重新回到 Activity 时:onRestart() -> onStart() -> onResume();
- 按下 Back 键时:onPause() -> onStop() -> onDestroy()
- 打开另一个 Activity[2] 时:onPause() -> [2]onCreate() -> [2]onStart() -> [2]onResume() -> onStop();
-
异常生命周期
异常生命周期是指:Activity 被系统回收或者设备屏幕方向配置改变
-
屏幕方向配置改变
当系统配置改变时,Activity 会被销毁, 依次调用onPause()-onStop()-onDestroy(), 并且会调用 onSaveInstanceState() 保存当前 Activity 的状态,这个方法只会在异常情况下调用,当Activity重新创建时,会调用 onRestoreInstanceState() 方法,并把保存的 Bundle 对象传递给此方法和 onCreate() 方法
可以指定 android:configChanges=”orientation” 来使横竖屏切换是不重新创建 Activity
-
Activity 被系统回收
当系统内存不足时,会按照 Activity 存在状态回收 Activity,并通过 onSaveInstanceState() 和 onRestoreInstanceState() 来存储和恢复数据
-