2016-07-12 69 views
0

我想了解SingleTask和FLAG_ACTIVITY_CLEAR_TOP之間的區別。看起來兩者都以相同的方式工作。 Ex-我創建了Activity A - > B - > c - > D - > E,其中C的啓動模式爲SingleTask。 現在,如果我從E打開C,然後按回車,我得到A - > B - > c 同樣的事情發生在我用FLAG_ACTIVITY_CLEAR_TOP從E啓動C時。 不確定這兩者有什麼區別。SingleTask和FLAG_ACTIVITY_CLEAR_TOP之間的區別

回答

1
Assume A , B , C , D , E , F are the Activities 
**launchMode=」singleTask」** 
We are adding launchMode=」singleTask」 in C. 
Example one: 
Previous State of Activity Stack 
D 
C 
B 
A 
Start C 
Final State of Activity Stack 
C -old instance gets extras data through onNewIntent(Intent intent); 
B 
A 
info - D gets destroyed 
Example Two: 
Previous State of Activity Stack 
B 
A 
Start C 
Final State of Activity Stack 
C -starts as usual. 
B 
A 

**FLAG_CLEAR_TOP** 
We are starting B from D with flag 
Previous State of Activity Stack 
D 
C 
B 
A 
Final State of Activity Stack 
B -old instance gets extras data through onNewIntent(Intent intent); 
A 
info -All others will get destroyed 

更詳細的說明,我已經寫了here

+0

如果是FLAG_CLEAR_TOP,所有活動都不會被破壞。只有D和C會被破壞。最終狀態將爲B A – swati

+0

@swati已更正 –

+0

正如您在兩種情況中所看到的,實例之間的活動被破壞。所以沒有區別。 – swati

0

如果設置launchMode="singleTask"但不也設置taskAffinity<activity>然後起跑模式被忽略。這是你看到行爲沒有區別的原因。

如果設置ClaunchMode="singleTask"taskAffinity="",然後有這個任務的堆棧:A-> B和則B啓動C,你將最終獲得2個獨立的任務:一個任務都有A-> B和其他任務包含C.如果您當時按下HOME按鈕,您會在最近的任務列表中看到您的應用的2個任務。