標籤:
問題描述
最近測試關於launchmode的四種方式
預設模式 top singletask 都已經瞭解了
唯獨這個instance模式
我的問題是
我們只作2個activity的假設A和B,其中A為instance的 B為標準模式
啟動過程為A -> B -> A ->B
這個過程為什麼B也只是一個執行個體了, B是標準模式,應該每次重新建立新的執行個體啊?
誰幫我解答一下這個問題,最好再做幾個例子的測試,複雜一點的,能讓我充分理解instance模式的
---------------------------
答:
1.對你問題描述的重複:
應用程式中有兩個activity,activityA和activtiyB,activityA的啟動模式為"SingleInstance",activityB的啟動模式為"Standard",啟動順序為activityA->activityB->activityA->activityB,問為什麼應用程式中activityB只有一個執行個體?
回答:activityB為"Standard"啟動模式,按照題目中描述的啟動順序,activityB的新執行個體會有兩個,
(1)activityB的新執行個體會和發送Intent啟動它的組件在同一個task內
(2)activityB的新執行個體會在這個task內運行
(3)activityA為"SingleInstance"啟動模式,它只會產生一個執行個體,並且這個執行個體在task中是根項目,這個task中不會再有新的元素,而兩個新的activityB執行個體和這個activityA的執行個體不會在同一個task中
(4)activityB的這兩個新執行個體會在同一個task中,除非啟動activityB的Intent中包括參數FLAG_ACTIVITY_NEW_TASK,那麼這兩個activityB的新執行個體會各自在一個新的task中運行。
2.你在問題中提到,"最好再做幾個例子的測試,複雜一點,能讓我充分理解instance模式的",我想先在理論分析上講清楚幾個例子,之後如果有時間,再設計幾個例子demo協助你理解:
android平台中activity有如下四種啟動模式,
"Standard"(預設)
"SingleTop"
"SingleTask"
"SingleInstance"
(1)"Standard"模式:該模式的Activity可以建立多個執行個體,且每個task都可以有多個執行個體,一個執行個體運行在哪個task內取決於給它發送Intent的組件運行在那個task內;
(2)"SingleTop"模式:該模式的Activity如果在task棧頂的話,則不產生新的該Activity的執行個體,直接使用棧頂的執行個體,否則,產生該Activity的執行個體;
比如現在task棧元素為A-B-C-D(D在棧頂),這時候給D發一個啟動Intent,如果D是"SingleTop"模式的話,則不會生產D的新執行個體,棧狀態仍為A-B-C-D;如果這時候寄件者給B發送Intent,不管B的launch mode是"Standard" 還是 "SingleTop" ,都會產生B的新執行個體,棧狀態變為A-B-C-D-B;
(3)"SingleTask"模式:只有一個task中會有,如果已經有其他的task並且包含該執行個體,那就直接調用那個task的執行個體;如果沒有任何task中有該Activity的執行個體,則建立一個task,將該執行個體裝入,作為task的根項目,但是該執行個體不會獨佔該task;
(4)"SingleInstance"模式:該Activity執行個體會獨佔task,其它Activity不能存在那個task裡,如果它啟動了一個新的Activity,不管新的Activity執行個體的launch mode 如何,新的Activity都將會到別的task裡運行。
3.最後附上一個連結,方便你更好地理解
http://blog.csdn.net/feng88724/article/details/6412638
android launchmode singleinstance問題