activity的啟動模式有4種,分別是standard.singletop. singletask. singleinstance,可以在androidmainifest.xml檔案中指定每乙個activity的啟動模式。乙個android應用一般都會有多個activity,系統會通過任務棧來管理這些activity。一般可以不指定啟動模式,預設啟動模式是standard模式。下面簡單介紹下四種啟動模式。
standard模式是android的預設啟動模式,這種模式下,activity可以有多個例項,每次啟動activity時,不管任務棧中是否已經有這個activity的例項,系統都會建立乙個新的activity例項。
singletop模式和standard模式類似,主要區別是當乙個singletop模式的activity已經位於任務棧的棧頂,接著去啟動它的時候,不會再建立新的例項,如果不是位於頂,就會建立新的例項,把配置檔案中firstactivity的啟動模式改為singletop,應用就會只有乙個activity,firstactivity就會自然處於任務棧的棧頂。當應用第一次啟動後,我們再按button去啟動新的firstactivity,log資訊中不再列印oncreate函式,不再建立新的firstactivity例項。
singletask模式的activity在同乙個task內只有乙個例項,如果activity位於棧頂,系統就不會建立新的例項,和singletop模式一樣。但activity已經存在但不位於棧頂時,系統就會把該activity移到棧頂,並把它上面的activity出棧。修改上面的程式,新建乙個secondactivity,將firstactivity設定為singletask啟動模式,並讓它啟動secondactivity,再讓secondactivity來啟動firstactivity。
singletask模式和前面兩種模式的最大區別就是singletask模式是任務內單例的,當activity是否需要單例時就可以設定activity為singletask模式。比如activity裡面有乙個列表有多個例項,可能導致使用者看到的列表不一致,有的activity需要經常啟動,如果每次都建立例項,會導致占用資源過多,這時可以使用singletask模式,但啟動singletask模式的activity會導致它上面的activity被銷毀,使用時需要注意。
singleinstance模式也是單例的,但和singletask不同,singletask只是任務棧內單例,系統裡是可以有多個singletask activity例項的,而singleinstance activity在整個系統裡只有乙個例項,啟動一singleinstanceactivity時,系統會建立乙個新的任務棧,並且這個任務棧只有他乙個activity。
singleinstance模式不常用,如果我們把乙個activity設定為singleinstance模式,啟動他時會慢一些,切換效果不好,影響體驗。乙個班用於多個應用之間,例如乙個電視launcher裡的activity,通過遙控器某個鍵在任何情況可以啟動,這個activity就可以設定為singleinstance模式,當在某應用中按鍵啟動這個activity,處理完後按返回鍵,就會回到之前啟動它的應用,不影響使用者體驗。
Activity四種啟動模式
launchmode在多個activity跳轉的過程中扮演著重要的角色,它可以決定是否生成新的activity例項,是否重用已存在的activity例項,是否和其他activity例項公用乙個task裡。這裡簡單介紹一下task的概念,task是乙個具有棧結構的物件,乙個task可以管理多個acti...
Activity四種啟動模式
activity的啟動模式可以通過androidmanifest.xml檔案中的元素的屬性來指定,一共有4中模式 android name activitymain android launchmode singletask 1 standard 2 singletop 3 singletask 4...
Activity 四種啟動模式
activity有四種載入模式 standard 預設 singletop,singletask和 singleinstance。以下逐一舉例說明他們的區別 一 standard activity的預設載入方法,即使某個activity在task棧中已經存在,另乙個activity通過intent跳...