android Flag啟動模式

銳湃發表於2015-09-20


一、taskAffinity屬性?


    這個 taskAffinity表示一個任務,這個任務就是當前activity所在的任務


 


二、優先順序


     如果一個activity在清單檔案設定了launchemode這時候startactivity啟動該activity並且設定了intent的啟動flag這個時候系統優先選擇flag


 


二、flag啟動模式


     1FLAG_ACTIVITY_NEW_TASK

                 重點掌握

                 注:應用廣泛

                 例如:開啟別的應用


          1.1概念通常這個標誌會啟用一個新的Task。然而,並不是必須是。如果已經存在一個Task與新Activityaffinity相同,這個Activity就會加入到那個Task中。如果不是,啟動一個新的Task        


          1.2特點:系統預設所有的activitytaskaffinity屬性值都相同


 


     2FLAG_ACTIVITY_CLEAR_TOP同一個應用

          重點掌握

                 注:應用廣泛     

                 例如:做返回、動態更新ui顯示



          2.1 場景:Activity A, Activity B, Activity CActivity D在同一個應用中.


       2.2 操作:Activity A啟動開僻Task堆疊(堆疊狀態: A), Activity A


中啟動Activity B(堆疊狀態: AB), ActivityB中啟動Activity C(堆疊狀態: ABC),ActivityC中啟動ActivityD(堆疊狀態: ABCD), ActivityD中啟動Activity B,啟動Activity BIntentFlag設定為FLAG_ACTIVITY_CLEAR_TOP, (堆疊狀態: AB).


 


     3FLAG_ACTIVITY_BROUGHT_TO_FRONT帶到前面--不同的應用

                      注:基本上不怎麼使用       當一個activity設定了singleTask,那麼系統會預設的給我們的intent設定                           當前這個flag           


          3.1場景: Activity A在名稱為"TaskOne應用"的應用中, Activity C


                         Activity D在名稱為"TaskTwo應用"的應用中.


            3.2操作:Launcher中單擊"TaskOne應用"圖示, Activity A啟動開僻Task堆疊,命名為TaskA(TaskA堆疊狀態: A),Activity A中啟動Activity C,啟動Activity CIntentFlag設為FLAG_ACTIVITY_NEW_TASK,Android系統會為Activity C開僻一個新的Task,命名為TaskB(TaskB堆疊狀態: C), ActivityC中啟動Activity D(TaskB的堆疊狀態: CD),長按Home,選擇TaskA,Activity A回到前臺,Activity A中再次啟動Activity C,在啟動Activity CIntent中設定FlagFLAG_ACTIVITY_BROUGHT_TO_FRONT,TaskB回到前臺,Activity C顯示, (TaskB的堆疊狀態: C).


          


 


     4FLAG_ACTIVITY_MULTIPLE_TASK:多個

           注:很少使用

          FLAG_ACTIVITY_NEW_TASK結合使用,首先在Intent中設定


   FLAG_ACTIVITY_NEW_TASK,開啟Activity,則啟動一個新Task,接著在Intent中設定FLAG_ACTIVITY_MULTIPLE_TASK,再次開啟同一個Activity,則還會新啟動一個Task.


 


   


   5 FLAG_ACTIVITY_SINGLE_TOP:

         重點掌握

 

                 注:應用廣泛

                 例如:QQ訊息介面


   概念如果當前棧頂的activity就是要啟動的activity,則不會再啟動一個新的activity


 


   6FLAG_ACTIVITY_RESET_TASK_IF_NEEDED:


   一般與FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET結合使用,如果設定該屬性,這個activity將在一個新的task中啟動或者或者被帶到一個已經存在的task的頂部,這時這個activity將會作為這個task的首個頁面載入。將會導致與這個應用具有相同親和力的task處於一個合適的狀態(移動activity到這個task或者從中移出),或者簡單的重置這個task到它的初始狀態


 


   7FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET


    在當前的Task堆疊中設定一個還原點當帶有FLAG_ACTIVITY_RESET_TASK_IF_NEEDEDIntent請求啟動這個堆疊時(典型的例子是使用者從桌面再次啟動這個應用)還原點之上包括這個應用將會被清除。應用場景:在email程式中預覽圖片時,會啟動圖片觀覽的actvity,當使用者離開email處理其他事情,然後下次再次從home進入email時,我們呈現給使用者的應該是上次email的會話,而不是圖片觀覽,這樣才不會給使用者造成困惑。


        :存在ActivityA, Activity B, Activity C, Activity A啟動開僻Task堆疊,


         命名為TaskA(TaskA堆疊狀態: A),ActivityA中啟動ActivityB(TaskA           堆疊狀態: AB),接著Activity B啟動Activity C(TaskA堆疊狀態: ABC),啟動Activity CIntent中設定FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET標題,這樣TaskA中有一個還原點,當有包FLAG_ACTIVITY_RESET_TASK_IF_NEEDEDIntent請求TaskA堆疊時(比如請求ActivityA)系統就會將還原點以上的Activity清除, TaskA堆疊中只剩下了AB.


8FLAG_ACTIVITY_NO_ANIMATION:

                重點掌握

                 注:自己配置的動畫不會被遮蔽

                 例如:不想要系統預設啟動


如果給Intent物件設定了這個標記,那麼將會阻止系統在Activity間切換的動畫變換。

 

       9FALG_ACTIVITY_NO_HISTORY:

            注:偶爾使用

                 例如:1、提交介面(當我們提交成功之後,我們需要調轉到新的介面)

                      2、當我們的activity沒有往下執行的操作(末級activity


如果給Intent物件設定了這個標記,那麼新的Activity將不會被保留在歷史堆疊中

 

       10FLAG_ACTIVITY_NO_USER_ACTION:

              重點掌握

                 注:比較常用

                 特性:用來控制onUserLeavehint是否被呼叫

                 場景:比如我們的通話撥號、鬧鐘程式

                      可以在onUserLeavehint方法中傳送廣播,關閉通知欄上的通知



如果給Intent物件設定了這個標記,在新啟動到前臺的Activity被掛起之前,它會阻止

普通的onUserLeaveHint()方法的回撥。如:電話撥號或鬧鐘程式就要使用這個標記來啟動Activity


11FLAG_ACTIVITY_PREVIOUS_IS_TOP:

注:很少使用(幾乎不怎麼使用)


如果給Intent物件設定了這個標記,並且這個Intent物件被用於從一個既存的Activity中啟動一個新的Activity,這個Activity不能用於接受傳送給頂層Activity的新的Intent物件,通常認為使用這個標記啟動的Activity會被自己立即終止。

 

       12FLAG_ACTIVITY_REORDER_TO_FRONT:

           重點掌握

                 注:如果我們這個activity設定了該flag,那麼將會導致歷史堆疊中如果存在這個activity,這個時候就會被帶到前臺

                 場景


     如果給Intent物件設定了這個標記,那麼將會導致任務歷史堆疊中既存的Activity被帶到前臺。

       13FLAG_ACTIVITY_TASK_ON_HOME: 

      把當前新啟動的任務置於Home任務之上,也就是按back鍵從這個任務返回的時候會回到home,即使這個不是他      們最後看見的activity

     注意這個標記必須和FLAG_ACTIVITY_NEW_TASK一起使用。




整理自教程




相關文章