注意:(默认和单例)是指定之后才跳转的,也就是说不管栈里之前什么情况,重要的是看你准备跳转的这个activity是什么模式
如果Activities拥有同样的taskAffinity,则它们是亲密的,它们之间在相互跳转时会位于同一个Task中,并不会产生新的task。反之情况比较复杂。
默认情况下,每个Activity都采用和Application相同的taskAffinity,如果Application没有设置的话,则默认使用包名。
1.standard模式
下面只有二三对应情况下创建一个新的activity时,生命流程会调用NewIntent方法
2.singletop模式:
当处于栈顶的时候,就会调用NewIntent;
3.singletask
当activity在栈中存在就会调用NewIntent
在taskAffinity属性不相同时,第一次创建Activity实例时,会启动新的task,并将实例添加到新创建的task中。非第一次启动,将Activity所在task中Activity之上的全部Activity删除,然后跳转到该Activity中。
4.singleinstance模式(指定的这个activity会自己开一个栈):
Intent的Flag:
FLAG_ACTIVITY_NEW_TASK
在taskAffinity相同时,FLAG_ACTIVITY_NEW_TASK并不起作用,表现和standerd相同。
在taskAffinity不相同时,第一次启动Activity时会创建一个新的task,并将该实例添加到task中,非第一次启动Activity,则不会发生任何事。
FLAG_ACTIVITY_CLEAR_TOP
一般FLAG_ACTIVITY_CLEAR_TASK/FLAG_ACTIVITY_CLEAR_TOP搭配使用。
当taskAffinity相同时:添加FLAG_ACTIVITY_NEW_TASK|FLAG_ACTIVITY_CLEAR_TOP没有任何作用。和没有添加时的效果一样。
当taskAffinity不同时:添加FLAG_ACTIVITY_NEW_TASK|FLAG_ACTIVITY_CLEAR_TOP后,表现的和singleTask一样。