參考:
activity 啟動的四種模式 :
androidmanifest.xml :: android:launchmode="???"
1.standard:【不會檢測activity 是否重複】
activity的預設啟動模式,在這種模式下啟動的activity可以被多次例項化,即在同乙個任務棧中可以存在多個activity的例項,每個例項都會處理乙個intent
物件。如果activity a的啟動模式為standard,並且a已經啟動,在 a 中再次啟動activity a,會在 a 的上面再次啟動乙個 a 的例項,即當前的桟中的狀態為a–>a。
2.singletop:【相同activity 且同時位於堆疊頂端(top)時才會重複處理,其他情況同於standard】
和standard模式很像,唯一的區別在於,如果乙個以singletop模式啟動的activity的例項已經存在於任務桟的桟頂,那麼再啟動這個activity時,不會建立新的例項,而是重用位於棧頂的那個例項,並且會呼叫該例項的onnewintent()方法將intent物件傳遞到這個例項中。
如果以singletop模式啟動的activity的乙個例項已經存在與任務桟中,但是不在桟頂,那麼它的行為和standard模式相同,也會建立多個例項。
3.singletask:【乙個堆疊僅可以有可以例項的task,頂出其他activity】
這種啟動模式的activity 會在其所在的任務棧中始終保持只有乙個例項。 當啟動這個activity的時候,系統會搜尋系統中現存的任務棧,如果有任務棧中沒有該activity的例項,則會建立這個activity屬於的任務棧,並正常建立該activity例項,否則會把這個任務棧調到前台,且會將任務棧中其實例以上的所有activity出棧,並呼叫該例項的onnewintent()方法將intent物件傳遞到這個例項當中。
4.singleinstance【乙個系統僅僅乙個這樣的activity】
是singletask的特殊情況,總是在新的任務中開啟,並且這個新的任務中有且只有這乙個例項,也就是說被該例項啟動的其他activity會自動執行於另乙個任務中。當再次啟動該activity的例項時,會重用已存在的任務和例項。並且會呼叫這個例項的onnewintent()方法,將intent例項傳遞到該例項中。同一時刻在系統中只會存在乙個這樣的activity例項。不同之處在於系統會對這種模式下的activity單獨建立乙個新的任務棧,由於其作用域不僅僅在棧內,所以後續的任何啟動都不會再次建立新的activity例項。
在 activitystarter.startactivityunchecked() 函式中進行檢測的:
安卓學習筆記 Activity的四種啟動模式
standard,singletop,singletask,singleinstance 在 androidmanifest.xml 中給 activity 標籤指定 android lunchmode 屬性 activity的預設啟動模式 每啟動乙個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...