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出棧。