1.使用方法:
Intent settingsTop = new Intent(android.provider.Settings.ACTION_SETTINGS);
settingsTop.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
getActivity().startActivity(settingsTop);
2.幾種模式的簡單介紹
Activity啓動模式 NEW_TASK
A啓動B看B對應的任務站有沒有,任務佔有了看B有沒有如果沒有加入B,把B對應的任務佔所有界面移動到前臺,activity的順序不變。有直接B對應的任務佔所有界面移動到前臺
1.Intent.FLAG_ACTIVITY_NEW_TASK
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所在堆棧(堆棧狀態: AB).
原因: 默認情況下同一個應用中的所有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返回到前臺顯示.
操作2: 在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), 在Activity C中啓動
Activity D(TaskB的狀態: CD) 長按Home鍵, 選擇TaskA, Activity A回到前臺, 再次啓動Activity C(從桌面或者ActivityA啓動,也是一樣的),
這時TaskB回到前臺, Activity D顯示,供用戶使用.說明了在此種情況下設置FLAG_ACTIVITY_NEW_TASK後,會先查找是不是有Activity C存在的棧,根據親和 性(taskAffinity),如果有,剛直接把這個棧整體移動到前臺,並保持棧中的狀態不變,即棧中的順序不變