Activity啓動模式

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

默認的跳轉類型,它會重新創建一個新的Activity,不過與這種情況,比如說Task1中有A,B,C三個Activity,此時在C中啓動D的話,如果在AndroidManifest.xml文件中給D添加了Affinity的值和Task中的不一樣的話,則會在新標記的Affinity所存在的Task中壓入這個Activity。如果是默認的或者指定的Affinity和Task一樣的話,就和標準模式一樣了啓動一個新的Activity.
(1) FLAG_ACTIVITY_NEW_TASK:
  
設置此狀態,記住以下原則,首先會查找是否存在和被啓動的Activity具有相同的親和性的任務棧(即taskAffinity,注意同一個應用程序中的activity的親和性一樣,所以下面的a情況會在同一個棧中,前面這句話有點拗口,請多讀幾遍),如果有,剛直接把這個棧整體移動到前臺,並保持棧中的狀態不變,即棧中的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所在堆棧(堆棧狀態: 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),如果有,剛直接把這個棧整體移動到前臺,並保持棧中的狀態不變,即棧中的順序不變

發佈了29 篇原創文章 · 獲贊 6 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章