標籤:開發 flag android
Android開發中Flag參數的講解:
Intent對象在Android開發中起著舉足輕重的作用,其內建了豐富的常量,用於傳遞資料,
下面本文將介紹跟Task有關的一些Flag參數,各參數的理解均來自Android API和本人在實際項目中的體驗,如果有描述不當之處,還請各位不吝賜教。
1.FLAG_ACTIVITY_BROUGHT_TO_FRONT:不在程式碼中設定,在launchMode中設定singleTask模式時系統幫你設定。
2.FLAG_ACTIVITY_CLEAR_TOP:清理要啟動的Activity之上的所有的Activity。該Activity位於棧頂。
例如,一個Activity Stack中有Activity:A,B,C,D。如果D調用了startActivity()啟動了B,那麼,C和D都將結束。
3.FLAG_ACTIVITY_NEW_TASK:將使Activity成為一個新Task的開始。
下面詳細講解一下FLAG_ACTIVITY_NEW_TASK這個Flag。設定此狀態原則如下:
(1).同一個應用程式中的Activity的親和性taskAffinity是一樣的。也就是說Activity是在同一個棧中的。
(2).設定該FLAG的時候,首先會尋找是否存在和被啟動的Activity具有相同的親和性的任務棧。
如果有,則直接把這個棧整體移動到前台,並保持棧中的狀態不變,即棧中的Activity的順序不變。
如果沒有,則建立一個棧來存放被啟動的Activity。
例如:
A.前提: Activity A和Activity B在同一個應用中.
操作: Activity A啟動開僻Task堆棧(堆棧狀態: A), 在Activity A中啟動Activity B, 啟動Activity B的Intent的Flag設為
FLAG_ACTIVITY_NEW_TASK, 則Activity B被壓入Activity A所在堆棧(堆棧狀態: A-B).
原因:預設情況下同一個應用中的所有Activity擁有相同的親和性(taskAffinity).即在同一個棧中。
B.前提: Activity A在名稱為”TaskOne應用”的應用中, Activity C和Activity D在名稱為”TaskTwo應用”的應用中.
操作1: 在Launcher中單擊”TaskOne應用”表徵圖, Activity A啟動開僻Task堆棧, 命名為TaskA(TaskA堆棧狀態: A),
在Activity A中啟動Activity C, 啟動Activity C的Intent的Flag設為FLAG_ACTIVITY_NEW_TASK,Android系統會為Activity C開僻一個新的Task, 命名為TaskB(TaskB堆棧狀態: C), 長按Home鍵, 選擇TaskA,Activity A回到前台, 再次啟動Activity C(兩種情況1.從案頭啟動;2.從Activity A啟動,兩種情況一樣), 這時TaskB回到前台, Activity C顯示, 供使用者使用, 即:包含FLAG_ACTIVITY_NEW_TASK的Intent啟動Activity的Task正在運行, 則不會為該Activity建立新的Task,而是將原有的Task返回到前台顯示。
4.FLAG_ACTIVITY_SINGLE_TOP:如果Activity位於Activity Stack的頂端,則不再建立一個新的執行個體。否則就會建立一個新的執行個體。等同於Activity的啟動模式launch mode為singleTop模式。
5.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS:如果設定,新的Activity不會在最近啟動的Activity的列表中儲存。
Android開發中Flag參數的講解