首先,Activity的启动模式有以下几种
1.standard --- 标准启动模式
2.singleTop --- 栈顶复用模式
3.singleTask --- 栈内复用模式
4.singleInstance -- 单实例模式
创建每个activity时,都有一个属性taskAffinity 中文译文任务相关性,其作用就是为activity指定其所在的栈,在 activity不指定taskAffinity属性时,系统会添加一个默认值,这个默认值就是应用程序的包名,也就是说在activity 设置为standard模式或在其他模式下未指定taskAffinity属性时,此activity会在一个名为包名的栈中被创建。下面 具体说明。
在standard标准启动模式下,所有的界面被启动时都会在同一个栈中创建新的实例,也就是说所有的Activity都在 一个栈中。
在其余三个模式下,如果将不同的activity指定为一个相同的taskAffinity,当这些activity被启动时,将会先寻找所 指定的栈,如果不存在则将这个栈创建出来,然后在这个栈中创建或复用activity的实例.如果未指定 taskAffinity,还是会被创建在默认的栈中.
设置taskAffinity,在manifest中设置taskAffinity的属性
<span style="white-space:pre"> </span><activity
android:name=".SecondActivity"
android:launchMode="singleTask"
android:taskAffinity="com.example.mike.task1" />
<activity
android:name=".ThridActivity"
android:launchMode="singleTask"
android:taskAffinity="com.example.mike.task1" />