Android中Activity是我们最常用的组件,我们需要深入的了解下activity的四种启动模式:
- standard
- singleTop
- singleTask
- singleInstance
standard 标准启动模式
顾名思义,这是Android的默认启动模式,当我们每次启动一个activity时,系统都会新创建一个实例,不管这个实例是否存在,他的生命周期函数会依次被调用。我们多次启动同一个activity系统会创建多个实例同时把他们一一放入任务栈中,我们点击back返回键时,会一一回退。
singleTop 栈顶复用模式
在该模式下,如果新的activity已经位于任务栈的栈顶,那么此activity不会被重新创建,同时他的onNewIntent会被回调,通过该方法我们可以取出当前请求的信息,这时候onCreate,onStart不会被调用。如果新的activity不是在栈顶,但是已存在,那么还是会重新创建实例
singleTask 栈内复用模式
在activity栈内,只要有一个实例存在,多次启动activity都不会重新创建实例,系统会回调onNewIntent函数,和singleTop效果一样。这里会分几种情况:
- 当前任务栈S1中情况为ABC,这时D以singleTask模式启动,要求任务栈为S2,由于S2和D都不存在,这时候系统会先创建任务栈S2,然后再创建D的实例并将其放入到S2中
- D的要求任务栈为S1,其他都和1相同,那么系统会直接创建D然后放入到S1中。
- 如果当前任务栈情况为ADBC,这时D以singleTask模式启动,要求任务栈为S1.这时系统会将D切换到栈顶,同时调用onNewIntent函数。由于singleTop具有clearTop的效果,会导致所有在D上面的Activity全部出栈,所以最终变成了AD。
singleInstance 单实例模式
这是一种加强型的singleTask模式,他除了具有所有singleTask的特性外,还只能单独处于一个单独的任务栈中。