幾種改變Activity回退棧默認行為的Intent Flag


FLAG_與LaunchMode相比最大的不同是臨時性

1.FLAG_ACTIVITY_NEW_TASK:

Developer.android.com的說法:

(1)在新的task中啟動這個Activity,

(2)如果已有一個task包含這個Activity,則這個task被帶到前台。

(3)效果與SingleTask相同。

實驗發現,只有從外部(另外的App)啟動Activity,並添加FLAG_ACTIVITY_NEW_TASK標識時,表現才與上述相符;

但不具有singleTask的clear_top效果。

而在同一個APP啟動Activity並添加FLAG_ACTIVITY_NEW_TASK時,與不添加標識效果一樣,不僅不會新建task,而且新建的Activity不具有唯一性,與singleTask不完全相同。

在同一App內啟動Activity時,如果將new_task和multi_task組合使用,就會達到打開新task的效果。

2.FLAG_ACTIVITY_SINGLE_TOP

打開的Activity如果在棧頂,則不創建新的實例,並且會觸發onNewIntent事件。

與啟動launchMode為SINGLE_TOP的Activity一致。

3.FLAG_ACTIVITY_CLEAR_TOP

Developer.android.com的說法:

(1)如果當前task包含這個Activity,這個Activity以上的Activity出棧,這個Activity到達棧頂。

(2)如果這個Activity是standard模式,這個Activity也出棧,並且重新實例化到達棧頂。

默認行為應該是清除包括這個Activity及其以上Activity的所有Activity,但如果為要啟動的Activity設置了特殊的launchMode,則launchMode會影響這個Activity的銷毀與否,即:

如果這個Activity是singleTop或singleTask模式,這個Activity不出棧。

singleInstance模式沒有CLEAR_TOP的意義,因為它的task中只有自己一個Activity。

4.FLAG_ACTIVITY_REORDER_TO_FRONT

如果當前task中包含這個Activity,這個Activity被拉到棧頂,其他Activity的順序不變,仍在task中。如果這個Activity被設置為SingleTask或者打開這個Activity的時候,還添加了CLEAR_TOP的標簽,則會將這個Activity上面的Activity出棧。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM