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單棧復用
特點:系統只會創建一個實例,并且只存在與一個單獨的任務棧中。