今天刚好有看了下这方面的一些资料,就拿你这个例子来说吧:如果C这个Activity在Manifest.xml中的声明中添加了Task affinity,并且和B所在栈的affinity不同,系统首先会查找有没有和C的栈 affinity相同的栈存在,如有存则将C压入那个栈,无则会新建一个属于C的affinity的栈将其压入。如果C的Task affinity默认没有设置,或者和B所在的栈的affinity相同,和不加FLAG_ACTIVITY_NEW_TASK 标记效果是一样的。
NEW_TASK这个标志涉及到一个Activity的亲和性---taskAffinity一个app中的所有Activity都有一个这个taskAffinity,可以在Manifest中进行手动设置但一般我们都会忽略,一个app中的所有Activity的taskAffinity都继承于Application的taskAffinity而Application的taskAffinity都默认为package的包名NEW_TASK这个flag在Activity启动的时候,会首先去找具有跟这个taskAffinity相同的task;如果找不到具有相同亲和性的task,则新建一个task丢进去所以题主这题就很明显了,第二个Activity肯定会被丢到跟第一个Activity相同的task中去了
网友评论