Activity四種啟動模式

2021-10-09 22:15:25 字數 2011 閱讀 9171

1、standard(標準模式)

標準啟動模式,也是activity的預設啟動模式。在這種模式下啟動的activity可以被多次例項化,即在同乙個任務中可以存在多個activity的例項,每個例項都會處理乙個intent物件。

如果activity a的啟動模式為standard,並且a已經啟動,在a中再次啟動activity a,即呼叫startactivity(new intent(this,a.class)),會在a的上面再次啟動乙個a的例項,即當前的桟中的狀態為a–>a。

2、singletop(單一頂部模式)

如果乙個以singletop模式啟動的activity的例項已經存在於任務桟的桟頂,那麼再啟動這個activity時,不會建立新的例項,而是重用位於棧頂的那個例項,並且會呼叫該例項的onnewintent()方法將intent物件傳遞到這個例項中。

舉例來說,如果a的啟動模式為singletop,並且a的乙個例項已經存在於棧頂中,那麼再呼叫startactivity(new intent(this,a.class))啟動a時,不會再次建立a的例項,而是重用原來的例項,

並且呼叫原來例項的onnewintent()方法。這是任務桟中還是這有乙個a的例項。

如果以singletop模式啟動的activity的乙個例項已經存在與任務桟中,但是不在桟頂,那麼它的行為和standard模式相同,也會建立多個例項。

3、singletask(單一任務模式)

只允許在系統中有乙個activity例項。如果系統中已經有了乙個例項, 持有這個例項的任務將移動到頂部,同時intent將被通過onnewintent()傳送。 如果沒有,則會建立乙個新的activity並置放在合適的任務中

(如果沒有這個例項,但設定taskaffinity屬性,那麼系統總會在乙個新任務的最底部(root)啟動這個activity,並且被這個activity啟動的其他activity會和該activity同時存在於這個新任務中)

如果系統中已經存在這樣的乙個activity則會重用這個例項,並且呼叫他的onnewintent()方法。

即,這樣的乙個activity在系統中只會存在乙個例項。

4、singleinstance(單一例項模式)

總是在新的任務中開啟,並且這個新的任務中有且只有這乙個例項,也就是說被該例項啟動的其他activity會自動執行於另乙個任務中。當再次啟動該activity的例項時,會重用已存在的任務和例項。

並且會呼叫這個例項的onnewintent()方法,將intent例項傳遞到該例項中。和singletask相同,同一時刻在系統中只會存在乙個這樣的activity例項。

總結:android framework既能在同乙個任務中對activity進行排程,也能以task為單位進行整體排程。在啟動模式為standard或singletop時,一般是在同乙個任務中對activity進行排程,

而在啟動模式為singletask或singleinstance是,一般會對task進行整體排程。

對task進行整體排程包括以下操作:

按home鍵,將之前的任務切換到後台

長按home鍵,會顯示出最近執行過的任務列表

啟動singletask模式的activity時,會在系統中搜尋是否已經存在乙個合適的任務,

1)若存在,則會將這個任務排程到前台以重用這個任務。

2)如果這個任務中已經存在乙個要啟動的activity的例項,則清除這個例項之上的所有activity,將這個例項顯示給使用者。

3)如果這個已存在的任務中不存在乙個要啟動的activity的例項,則在這個任務的頂端啟動乙個例項。

4)若這個任務不存在,則會啟動乙個新的任務,在這個新的任務中啟動這個singletask模式的activity的乙個例項。

啟動singleinstance的activity時,會在系統中搜尋是否已經存在乙個這個activity的例項,

1)如果存在,會將這個例項所在的任務排程到前台,重用這個activity的例項(該任務中只有這乙個activity),

2)如果不存在,會開啟乙個新任務,並在這個新任務中啟動這個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跳...