1.standard标准模式
特点:系统每启动一次activity,都会创建一个新的实例,并将其添加在启动者任务栈的栈顶。
示例: A1->B->C->A2, 则栈内元素从栈顶到栈底依次为A2,C,B,A1,依次出栈顺序也为A2,C,B,A1。
2.singleTask栈内复用
特点:这是一种单实例模式,只要栈内存在某一个activity实例,则启动该activity都会复用此activity,并且生命周期会调用onNewIntent(),不会调用onCreate(),onStart(),同时,singleTask具有清除相同任务栈上层所有activity的效果。
示例:①相同任务栈:A->B1->C->B2,再依次点击返回:
(启动按钮)taskA onCreate->
taskB1 onCreate->
taskC onCreate->
(taskB1 onNewIntent->taskC onDestroy)->
(返回按钮)taskB1 onDestroy->
taskA onDestroy,
相同任务栈,始终调用的是B1,B2不会出现。
②不同任务栈:A,C,D属于栈m,并且launchmode为singletask,B属于栈n ,launchmode为singletask,
模拟A->B1->D->B2,依次点击返回,
(启动)taskA onCreate->
taskB1 onCreate different task->
taskD onCreate->
taskB1 onNewIntent ifferent task->
(返回)taskB1 onDestroy different task->
taskD onDestroy->
taskA onDestroy,
可见存在于不同任务栈的D activity不会被清除;
模拟A->B->D1->C->D2,依次点击返回,
(启动)taskA onCreate->
taskB onCreate different task->
taskD1 onCreate->
taskC onCreate->
(taskD1onNewIntent- >taskC onDestroy)->
(返回)taskD1 onDestroy->
taskA onDestroy->
taskB onDestroy different task,
应用会先关闭最靠前任务栈的activity,然后关闭后面任务栈的activity,并不是按照activity启动顺序进行关闭的,与任务栈顺序有关系;
②不同任务栈:A,C,D属于栈m,并且launchmode为standart,B属于栈n ,launchmode为singletask:
模拟A->B1->D->B2,依次点击返回,
(启动)taskA onCreate->
taskB1 onCreate different task->
taskD onCreate->
(taskB1 onNewIntent different task ->taskD onDestroy)->
(返回)taskB1 onDestroy different task->
taskA onDestroy
可见当被启动的activity启动模式是standard的时候,被启动的activity会被加入到启动它的activity栈中,当被启动的activity不是standard时,不会被加入到启动者的任务栈中。
3.singleTop栈顶复用
特点:位于顶部的activity会被复用。
示例:A->B->C->D->C,则栈顺序为C,D,C,B,A; A->B->C->C,则栈顺序为C,B,A。
4.singleInstance单栈复用
特点:系统只会创建一个实例,并且只存在与一个单独的任务栈中。