Activity的生命周期
-
onCreate() :这个方法是在活动最开始被创建的时候调用,在这个方法中完成活动的初始化操作
-
onStart() :这个方法是在活动由不可见变为可见的时候调用
-
onResume() :这个方法是在活动能被用户操作的时候调用,例如点击、滑动等
-
onPause() :这个方法是另外一个活动将要启动的时候调用
-
onStop() :这个方法是活动不可见时调用
-
onRestart() :这个方法是活动将要重新出现时调用
-
onDestroy() :这个方法是活动被销毁的时候调用
-
当一个活动A被创建时会依次调用 onCreat()、onStart()、onResume()这3个方法。
-
当另外一个活动B启用时活动A会调用onPause(),而活动B调用onCreat()、onStart()、onResume(),如果活动A不可见的话,活动A会调用onStop()方法。
-
当在活动B点击返回键时,活动B先调用onPause方法,若活动A是由不可见变为可见则依次执行onRestart()、onStart()、onResume()方法,然后活动B调用onStop()、onDestroy()方法
流程图如下
graph TD
A["创建活动A"] -->B("活动AonCreate()、onStart()、onResume()")
B -->C["活动B被创建"]
C -->D["活动A onpause()"]
D -->F["活动B onCreate()、onStart()、onResume()"]
F -->G["活动A是否可见"]
G -->|"是"| H["用户点击返回"]
H -->J["活动B onPause()"]
J -->I["活动A onResume()"]
I -->K["活动B onStop()、onDestroy"]
G -->|"否"| L["用户点击返回"]
L -->M["活动B onPause()"]
M -->N["活动A onRestart()、onstart()、onResume"]
N -->K
异常情况下的生命周期分析
异常情况下的生命周期主要由2种
1. 资源相关的系统配置发生改变导致Activity被杀死并重建
当系统配置发生改变时,acivity会被销毁会调用onPause()、onSaveInstanceState()、onStop()、onDestroy()方法,其中onSaveInstanceState()方法会将activity当前的状态保存为一个Bundle对象,这个方法只会在activity异常终止的情况下调用。
当系统重建时会调用onCreate()、onStart()、onRestoreInstanceState()、onResume()方法
onRestoreInstanceState()方法去获取之前所保存的的Bundle对象作为参数发送给onCreate()、onRestoreInstanceState()方法判断是否重建,如果确定重建,则提取出保存的数据并恢复。
2. 资源内存不足导致优先级较低的Activity被销毁
这种情况下数据的保存和恢复与第一种情况一样,如果资源内存不足,系统会根据activity的优先级来选择杀死哪些activity来释放内存
- 前台Activity,正在和用户交互的Activity,用户可以在上面进行一系列的操作,例如点击按钮,滑动列表
- 可见但非前台的Activity,可以被用户看见,但是用户不能对其进行操作就像隔了一层罩子
- 后台Activity,位于后台的Activity,优先级最低,系统首先清理该部分的Activity
Activity的启动模式
启动模式一共四种
standard
standard是活动默认的启动模式,如果不进行显示指定,所有的活动都会自动使用这种启动模式。每创建一个新的Activity都会将其放入栈中,遵循先进后出,后进先出的原则
singleTop
若某活动在singleTop模式下,每次该活动处于栈顶则不会重新创建该活动
singleTask
当某个活动的启动模式为singleTask时,每次启动该活动时,会检查活动栈中是否存在该活动的实例,若存在,则会将该实例上的所有活动出栈,直到该实例处于栈顶。
singleInstance
指定为singleInstance的活动会启用一个新的返回栈来管理这个活动,并且不会由其他的Activity实例进入。