A B--Standard:
先进先出
结论:
每个Intent,都创建了一个新的Activity来响应,并且Back时是按照弹栈的顺序处理的。
A--Standard B--SingleTop:
Task:12 LunchModeActivityA onCreate.
A
再启动A:
Task:12 LunchModeActivityA onCreate.
A
再启动B:
Task:12 LunchModeActivityB onCreate.
AAB
再启动B:
Task:12 LunchModeActivityB onNewIntent.
AAB
结论:
当B不在栈顶时,仍然会创建B的新实例。
当B在栈顶时,请求启动B的Intent并没有触发创建B的新实例,而是触发了栈顶B的onNewIntent()
按Back键依次返回桌面,输出依次为:
Task:12 LunchModeActivityB onDestroy.
AA
Task:12 LunchModeActivityA onDestroy.
A
Task:12 LunchModeActivityA onDestroy.
null
结论:
虽然发送了四次Intent,但实际上只创建了3个Activity,所以只有3次销毁输出。
A--Standard,B--SingleTask:
Task:3 LunchModeActivityA onCreate.----A
启动B:
Task:3 LunchModeActivityB onCreate.----AB
启动A:
Task:3 LunchModeActivityA onCreate. ----ABA
启动B:
Task:3 LunchModeActivityB onNewIntent.
Task:3 LunchModeActivityA destroyed. ----AB
结论:
当B已经存在时,再次请求B会触发已经存在的B实例的onNewIntent;
并且如果B所在的任务栈上面有其他Activity,那么其他Activity会被销毁。
A--Standard,B--SingleInstance:
Task:4 LunchModeActivityA onCreate.
A
启动B,此时新创建了任务栈5,和先前的A并不在一个任务。
Task:5 LunchModeActivityB onCreate.
A B
再启动B,没有创建新实例:
Task:5 LunchModeActivityB onNewIntent.
A B
再启动A,再旧的任务4中创建了A的新实例
Task:4 LunchModeActivityA onCreate.
AA B
按下Back键:
Task:4 LunchModeActivityA onDestroy.
A B
看输出和前面没区别,但是注意界面,此时不是切换到B界面,因为此时活动任务是4,所以A被显示了出来。
再次按下Back键:
Task:4 LunchModeActivityA onDestroy.
此时因为任务4已经结束,B所在的任务5成为活动任务,B的界面才被显示出来。
null B
总结:被该属性表示的Activity会标记成另一个Taskid,并且该Activity的实例不会重复创建,back的时候是最后一个显示和退出的。