零、资料
- xxv/android-lifecycle
- 《第一行代码》
- 《Android 开发艺术探索》
一、Activity/Fragment 生命周期图
Activity/Fragment 生命周期图二、Activity状态
- 运行状态 Running
- 活动处于栈顶时。
- 系统回收等级最低。
- 暂停状态 Paused
- 活动不再处于栈顶,但仍然可见(即当失去焦点、非全遮挡、透明遮挡时)。
- 此时状态及变量都还存在。
- 当内存紧张时,才有可能被系统回收掉。
- 停止状态 Stopped
- 活动不再处于栈顶,并完全不可见。
- 此时状态及变量都还存在,但并不安全。
- 当内存紧张时,才有可能被系统回收掉。
- 销毁状态 Killed
- 活动从栈中移除后变为销毁状态。
- 系统优先回收当前状态的活动。
三、Activity生命周期
正常情况
- onCreate()
- 第一次创建。
- 应该在此完成初始化操作(加载布局、绑定事件等)
- onStart()
- 由不可见变为可见。
- 并未出现在前台。
- onResume()
- 开始处于
运行状态
。 - 此时的 Activity 一定位于栈顶。
- Activity 准备好和用户进行交互的时候调用。
- 可以在此初始化一些资源,比如重新初始化在onPause()或onStop()中释放的资源。
- 开始处于
- onPause()
- 开始处于
暂停状态
。 - 当系统准备去启动或恢复另一个 Activity 的时候调用。
- 通常在此将一些消耗CPU的资源释放掉,以及保存一些关键数据。
- 当前方法执行速度一定要快,不然会影响到新的栈顶活动的使用。
- 当前方法执行完成后,新 Activity 的onResume方法才会被执行。
- 开始处于
- onStop()
- 开始处于
停止状态
。 - 在 Activity 完全不可见的时候调用。停止或完全被覆盖,仅在后台运行。
- 可以做一些资源释放的操作(不能太耗时)。
- 它和onPause()主要区别在于,如果启动的新 Activity 是一个对话框式的 Activity,那么onPause()会得到执行,而onStop()方法并不会执行。
- 开始处于
- onDestroy()
- 开始处于
销毁状态
。 - Activity 被销毁之前调用。
- 开始处于
- onRestart()
- 重新启动。
- Activity 由
停止状态
变为运行状态
之前调用。
重建情况
-
onSaveInstanceState()
- 当 Activity 在异常终止时系统调用。
- 把需要保存的数据保存到 Bundle。
-
onRestoreInstanceState()
- 当 Activity 异常终止后被重建后调用。
- 还原异常终止时保存的 Bundle。
注意:
1. 异常情况系统自动为我们做了一定的恢复工作。
eg:视图结构、文本框数据、ListView滚动位置、View状态等。
2. 当资源发生改变、内存不足杀死 Activity 时为重建情况。
复用情况
- onNewIntent()
- singleTop、singleTask、singleInstance 三种启动重复启动时会调用。
四、避免重建
指定 Activity configChanges属性可以避免重建。
android: configChanges=""
configChanges 的项目和含义
项目 | 含义 |
---|---|
locale | 设备的本地位置发生了改变,一般指切换了系统语言 |
keyboard | 健盘类型发生了改变,比如用户使用了外插键盘 |
keyboardHidden | 键盘的可访问性发生了改变,比如用户调出了键盘 |
fontScale | 系统字体缩放比例发生了改变,比如用户选择了一个新字号 |
orientation | 屏幕方向发生了改变,这个是最常用的,比如旋转了手机屏幕 |
五、Activity生存期
-
完整生存期
- 活动在onCreate() ~ onDestroy()的所经历。
- 一般情况下,一个活动会在onCreate()中完成各种初始化操作,而在onDestroy()中完成释放内存的操作。
-
可见生存期
- 活动在onStart() ~ onStop()的所经历。
- 我们可以通过这两个方法,合理地管理那些对用户可见的资源。比如在onStart()中对资源进行加载,而在onStop()中对资源进行释放。
-
前台生存期
- 活动在onResume() ~ onPause()的所经历。
- 在前台生存期内,活动总是处于运行状态。
- 此时的活动是可以和用户进行交互。
2018/02/24,2019/10/15修改
网友评论