Activity四種啟動模式:
(一)、基本描述
standard:標准模式:如果在mainfest中不設置就默認standard;standard就是新建一個Activity就在棧中新建一個activity實例;singleTop:棧頂復用模式:與standard相比棧頂復用可以有效減少activity重復創建對資源的消耗,但是這要根據具體情況而定,不能一概而論;singleTask:棧內單例模式,棧內只有一個activity實例,棧內已存activity實例,在其他activity中start這個activity,Android直接把這個實例上面其他activity實例踢出棧GC掉;singleInstance :堆內單例:整個手機操作系統里面只有一個實例存在就是內存單例;
(二)、場景設置
Activity的啟動模式的應用的設置是和它的開發場景有關系的,在APP中打開新的Activity的基本上分為兩種情況:
目標Activity是本應用中的Activity,即它的啟動模式是可以直接在fanifest中配置或者默認為standard,任務棧也可以自己隨意設置;目標Activity是第三方APP中的Activity,這個時候就需要先考慮打開新Activity的是和自己APP放在同一任務棧中還是新的task中【這個是很重要的因為在Android的機制中:同一個任務棧中的activity的生命周期是和這個task相關聯的[具體實例見下文]】,然后考慮Activity的啟動模式; 所以Android提供了優先級更高的設置方式在Intent.setFlags(int flags),通過這setFlags就可以為打開第三方的APP中Activity設置任務棧和啟動模式了,具體設置就自己去看源碼了。
二、Activity四種啟動模式常見使用場景:
| LauchMode | Instance |
|---|---|
| standard | mainfest中沒有配置就默認標准模式 |
| singleTop | 登錄頁面、WXPayEntryActivity、WXEntryActivity 、推送通知欄 |
| singleTask | 程序模塊邏輯入口:主頁面(Fragment的containerActivity)、WebView頁面、掃一掃頁面 |
| singleInstance | 系統Launcher、鎖屏鍵、來電顯示等系統應用 |
