singleTop栈顶复用模式 只有在栈顶才复用否则重建
singleTask 栈内复用模式
singleInstance 单实例模式 ,可认为是加强版的singleTask,不同之处是次模式下的Activity只能单独的位于一个任务栈中
TaskAffinity 是设置任务栈的属性,默认包名
1. 设置了"singleTask"启动模式的Activity,它在启动的时候,会先在系统中查找属性值affinity等于它的属性值taskAffinity的任务存在;如果存在这样的任务,它就会在这个任务中启动,否则就会在新任务中启动。因此,如果我们想要设置了"singleTask"启动模式的Activity在新的任务中启动,就要为它设置一个独立的taskAffinity属性值。
2. 如果设置了"singleTask"启动模式的Activity不是在新的任务中启动时,它会在已有的任务中查看是否已经存在相应的Activity实例,如果存在,就会把位于这个Activity实例上面的Activity全部结束掉,即最终这个Activity实例会位于任务的堆栈顶端中。
简单来说就是 singleTask 指定了单独的任务栈则在任务栈中启动,如果没有单独设置任务栈,则在当前任务栈显示,并且如果不在当前栈顶的话,会销毁此acivity所在栈之前的activity 栈顶显示
singleInstance这种启动模式比较特殊,因为它会启用一个新的栈结构,将Acitvity放置于这个新的栈结构中,并保证不再有其他Activity实例进入。