1. 程式人生 > >【筆記】Activity四種啟動模式區別

【筆記】Activity四種啟動模式區別

參考:https://blog.csdn.net/edisonchang/article/details/49981457


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()   函式中進行檢測的: