Activity的四种启动模式
- 标准模式:standard
- 栈顶复用模式:singleTop
- 栈内复用模式:singleTask
- 加强版栈内复用模式:singleInstance
如何修改Activity的启动模式
在AndroidManifest.xml文件中注册时添加
android:launchMode="singleTask"
launchMode属性有四个值,就是Activity的四种启动模式。
标准模式:standard
标准模式不用在AndroidManifest.xml文件中添加launchMode属性,Activity默认以standard模式启动。在standard模式下可以在栈中存在该Activity的多个实例,准确的来说是我们每次去创建同一个Activity的时候,无论栈内是否有这个Activity的实例我们都会创建一个新的实例放在栈顶。这种启动模式是常规Activity使用最多的启动模式。
栈顶复用模式:singleTop
栈顶复用模式,顾名思义,当我们创建Activity实例的时候,会先检查位于栈顶的Activity实例是否跟我们创建的Activity实例是同一个,如果是同一个的,那我们不会创建新的实例,直接使用当前栈顶的Activity实例。以singleTop启动的Activity可以在栈中存在多个实例,但是栈内不会存在两个连续相同的实例。
栈内复用模式:singleTask
与栈顶复用模式不同的是一个栈内只有一个实例,当我们启动Activity时,会遍历栈内是否存在这个Activity的实例,如果有的话,那么会对该实例上面Activity实例进行清栈操作,让这个Activity实例到栈顶。最常见的使用方式就是在应用的首页中,其他页面都是用过首页进行伸展的。我们通过Intent跳转到首页之后不会存在返回,回退的页面,这个时候之前压入栈的Activity没有用了。使用singleTask模式就可以将栈内不会继续使用的Activity清除。
加强版栈内复用模式:singleInstance
与singleTask模式的区别在于,以singleInstance模式启动的Activity会自己存在一个栈中,这个栈不会有其他Activity实例。