Intent的常用Flag引數

2022-03-29 23:21:35 字數 1548 閱讀 7919

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。也就是說,如果新增了flag_activity_clear_top標記,並且目標activity在棧中已經存在,則將會把位於該目標activity之上的activity從棧中彈出銷毀。這跟上面把b的launch mode設定成singletask類似。

flag_activity_new_task:

例如現在棧1的情況是:a b c。c通過intent跳轉到d,並且這個intent新增了flag_activity_new_task標記,如果d這個activity在manifest.xml中的宣告中新增了task affinity,並且和棧1的affinity不同,系統首先會查詢有沒有和d的task affinity相同的task棧存在,如果有存在,將d壓入那個棧,如果不存在則會新建乙個d的affinity的棧將其壓入。如果d的task affinity預設沒有設定,或者和棧1的affinity相同,則會把其壓入棧1,變成:a b c d,這樣就和不加flag_activity_new_task標記效果是一樣的了。注意如果試圖從非activity的非正常途徑啟動乙個activity,比如從乙個service中啟動乙個activity,則intent必須要新增flag_activity_new_task標記。

flag_activity_no_history:

例如現在棧情況為:a b c。c通過intent跳轉到d,這個intent新增flag_activity_no_history標誌,則此時介面顯示d的內容,但是它並不會壓入棧中。如果按返回鍵,返回到c,棧的情況還是:a b c。如果此時d中又跳轉到e,棧的情況變為:a b c e,此時按返回鍵會回到c,因為d根本就沒有被壓入棧中。

flag_activity_single_top:和上面activity的launch mode的singletop類似。如果某個intent新增了這個標誌,並且這個intent的目標activity就是棧頂的activity,那麼將不會新建乙個例項壓入棧中。

activity的主要屬性:(在 androidmanifest.xml中 )

allowtaskreparenting:設定成true時,和intent的flag_activity_new_task標記類似。

alwaysretaintaskstat:   如果使用者長時間將某個task移入後台,則系統會將該task的棧內容彈出只剩下棧底的activity,此時使用者再返回,則只能看到根activity了。如果棧底的activity的這個屬性設定成true,則將阻止這一行為,從而保留所有的棧內容。

cleartaskonlaunch:根activity的這個屬性設定成true時,和上面的alwaysretaintaskstat的屬性為true情況搞好相反。

finishontasklaunch:對於任何activity,如果它的這個屬性設定成true,則當task被放置到後台,然後重新啟動後,該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一些引數

1 flag activity new task 設定此狀態,記住以下原則,首先會查詢是否存在和被啟動的activity具有相同的親和性的任務棧 即taskaffinity,注意同乙個應用程式中的activity的親和性一樣,所以下面的a情況會在同乙個棧中,前面這句話有點拗口,請多讀幾遍 如果有,剛...

Intent的幾種Flag的不同

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