intent的Flag一些引數

2021-07-04 23:59:04 字數 2931 閱讀 6521

(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),如果有,剛直接把這個棧整體移動到前台,並保持棧中的狀態不變,即棧中的順序不變

(2)flag_activity_clear_top:

前提: activity a, activity b, activity c和activity d在同乙個應用中.

操作: activity a啟動開僻task堆疊(堆疊狀態: a), 在activity a中啟動activity b(堆疊狀態: ab), 在activity b中啟動

activity c(堆疊狀態: abc), 在activity c中啟動activity d(堆疊狀態: abcd), 在activity d中啟動activity b,

啟動activity b的intent的flag設定為flag_activity_clear_top, (堆疊狀態: ab).

(3)flag_activity_brought_to_front:

這個網上很多人是這樣寫的。如果activity在task存在,拿到最頂端,不會啟動新的activity。這個有可能會誤導大家! 他這個flag其實是這個意思!比如說我現在有a,在a中啟動b,此時在a中intent中加上這個標記。此時b就是以flag_activity_brought_to_front方式啟動,此時在b中再啟動c,d(正常啟動c,d),如果這個時候在d中再啟動b,這個時候最後的棧的情況是 a,c,d,b。如果在a,b,c,d正常啟動的話,不管b有沒有用flag_activity_brought_to_front啟動,此時在d中啟動b的話,還是會變成a,c,d,b的。

(4) flag_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:

當前task堆疊中存在abcd四個activity, a是棧頂activity, d為棧底activity, 存在開啟a的intent中設定了

flag_activity_single_top標誌, 則會使用棧頂a, 而不會從新new a.

4種載入模式:

引用:1.standard

這就是standard啟動模式,不管有沒有已存在的例項,都生成新的例項。

2.singletop

如果發現有對應的activity例項正位於棧頂,則重複利用,不再生成新的例項。否則會重新生成乙個示例。

3.singletask

如果發現有對應的activity例項,則使此activity例項之上的其他activity例項統統出棧,使此activity例項成為棧頂物件,顯示到幕前。

Intent的常用Flag引數

flag activity clear top 例如現在的棧情況為 a b c d d此時通過intent跳轉到b,如果這個intent新增flag activity clear top標記,則棧情況變為 a b。如果沒有新增這個標記,則棧情況將會變成 a b c d b。也就是說,如果新增了fla...

Intent的常用Flag引數

intent的常用flag引數 flag activity clear top 例如現在的棧情況為 a b c d d此時通過intent跳轉到b,如果這個intent新增flag activity clear top標記,則棧情況變為 a b。如果沒有新增這個標記,則棧情況將會變成 a b c d...

Intent的幾種Flag的不同

冬天有點冷,不想寫部落格。研究下intent的幾種flag的不同 1,flag activity clear top 會清理掉目標activity棧上面所有的activity intent intent new intent this,b.class intent.setflags intent.f...