1.standard標(biāo)準(zhǔn)模式
特點(diǎn):系統(tǒng)每啟動一次activity,都會創(chuàng)建一個新的實(shí)例,并將其添加在啟動者任務(wù)棧的棧頂。
示例: A1->B->C->A2, 則棧內(nèi)元素從棧頂?shù)綏5滓来螢锳2,C,B,A1,依次出棧順序也為A2,C,B,A1。
2.singleTask棧內(nèi)復(fù)用
特點(diǎn):這是一種單實(shí)例模式,只要棧內(nèi)存在某一個activity實(shí)例,則啟動該activity都會復(fù)用此activity,并且生命周期會調(diào)用onNewIntent(),不會調(diào)用onCreate(),onStart(),同時,singleTask具有清除相同任務(wù)棧上層所有activity的效果。
示例:①相同任務(wù)棧:A->B1->C->B2,再依次點(diǎn)擊返回:
(啟動按鈕)taskA onCreate->?
taskB1 onCreate->?
taskC onCreate->
(taskB1 onNewIntent->taskC onDestroy)->? ? ? ? ? ?
?(返回按鈕)taskB1 onDestroy->
taskA onDestroy,
相同任務(wù)棧,始終調(diào)用的是B1,B2不會出現(xiàn)。
②不同任務(wù)棧:A,C,D屬于棧m,并且launchmode為singletask,B屬于棧n ,launchmode為singletask,
?模擬A->B1->D->B2,依次點(diǎn)擊返回,
(啟動)taskA onCreate->
taskB1 onCreate different task->
taskD onCreate->
taskB1 onNewIntent ifferent task->? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
?(返回)taskB1 onDestroy? different task->
taskD onDestroy->
taskA onDestroy,
可見存在于不同任務(wù)棧的D activity不會被清除;
模擬A->B->D1->C->D2,依次點(diǎn)擊返回,
(啟動)taskA onCreate->
taskB onCreate different task->
taskD1 onCreate->
taskC onCreate->? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
?(taskD1onNewIntent- >taskC? onDestroy)->
?(返回)taskD1 onDestroy->
taskA onDestroy->
taskB onDestroy different task,
應(yīng)用會先關(guān)閉最靠前任務(wù)棧的activity,然后關(guān)閉后面任務(wù)棧的activity,并不是按照activity啟動順序進(jìn)行關(guān)閉的,與任務(wù)棧順序有關(guān)系;
?②不同任務(wù)棧:A,C,D屬于棧m,并且launchmode為standart,B屬于棧n ,launchmode為singletask:
模擬A->B1->D->B2,依次點(diǎn)擊返回,
(啟動)taskA onCreate->
taskB1 onCreate different task->
taskD onCreate->
(taskB1 onNewIntent different task ->taskD onDestroy)->
(返回)taskB1 onDestroy different task->
taskA onDestroy
可見當(dāng)被啟動的activity啟動模式是standard的時候,被啟動的activity會被加入到啟動它的activity棧中,當(dāng)被啟動的activity不是standard時,不會被加入到啟動者的任務(wù)棧中。
3.singleTop棧頂復(fù)用
特點(diǎn):位于頂部的activity會被復(fù)用。
示例:A->B->C->D->C,則棧順序?yàn)镃,D,C,B,A;??A->B->C->C,則棧順序?yàn)镃,B,A。
4.singleInstance單棧復(fù)用
特點(diǎn):系統(tǒng)只會創(chuàng)建一個實(shí)例,并且只存在與一個單獨(dú)的任務(wù)棧中。