Activity四種啟動模式

2022-01-12 19:58:54 字數 2506 閱讀 9267

activity啟動模式有四種,如下://主要為避免建立大量重複的activity等問題

1.standard

2.singletop

3.singletask

4singleinstance .

設定activity的啟動模式,只需要在androidmanifest.xml裡對應的標籤設定android:launchmode屬性,如下:

<

activity

android:name

=".mainactivity"

android:launchmode

="standard"

/>

以下為四種模式詳解:

standard

預設模式,可以不用寫配置。在這個模式下,都會預設建立乙個新的例項。因此,在這種模式下,可以有多個相同的例項,也允許多個相同activity疊加。

例如:若我有乙個activity名為a1, 上面有乙個按鈕可跳轉到a1。那麼如果我點選按鈕,便會新啟乙個activity a1疊在剛才的a1之上,再點選,又會再新啟乙個在它之上……

點back鍵會依照棧順序依次退出。

singletop

可以有多個例項,但是不允許多個相同activity疊加。即,如果activity在棧頂的時候,啟動相同的activity,不會建立新的例項,而會呼叫其onnewintent方法。

例如:若我有兩個activity名為b1,b2,兩個activity內容功能完全相同,都有兩個按鈕可以跳到b1或者b2,唯一不同的是b1為standard,b2為singletop。

若我意圖開啟的順序為b1->b2->b2,則實際開啟的順序為b1->b2(後一次意圖開啟b2,實際只呼叫了前乙個的onnewintent方法)

若我意圖開啟的順序為b1->b2->b1->b2,則實際開啟的順序與意圖的一致,為b1->b2->b1->b2。

singletask

只有乙個例項。在同乙個應用程式中啟動他的時候,若activity不存在,則會在當前task建立乙個新的例項,若存在,則會把task中在其之上的其它activity destory掉並呼叫它的onnewintent方法。

如果是在別的應用程式中啟動它,則會新建乙個task,並在該task中啟動這個activity,singletask允許別的activity與其在乙個task中共存,也就是說,如果我在這個singletask的例項中再開啟新的activity,這個新的activity還是會在singletask的例項的task中。

例如:若我的應用程式中有三個activity,c1,c2,c3,三個activity可互相啟動,其中c2為singletask模式,那麼,無論我在這個程式中如何點選啟動,如:c1->c2->c3->c2->c3->c1-c2,c1,c3可能存在多個例項,但是c2只會存在乙個,並且這三個activity都在同乙個task裡面。

但是c1->c2->c3->c2->c3->c1-c2,這樣的操作過程實際應該是如下這樣的,因為singletask會把task中在其之上的其它activity destory掉。

操作:c1->c2          c1->c2->c3          c1->c2->c3->c2            c1->c2->c3->c2->c3->c1             c1->c2->c3->c2->c3->c1-c2

實際:c1->c2          c1->c2->c3          c1->c2                              c1->c2->c3->c1                               c1->c2

若是別的應用程式開啟c2,則會新啟乙個task。

如別的應用other中有乙個activity,taskid為200,從它開啟c2,則c2的taskidi不會為200,例如c2的taskid為201,那麼再從c2開啟c1、c3,則c2、c3的taskid仍為201。

注意:如果此時你點選home,然後再開啟other,發現這時顯示的肯定會是other應用中的內容,而不會是我們應用中的c1 c2 c3中的其中乙個。

singleinstance

只有乙個例項,並且這個例項獨立執行在乙個task中,這個task只有這個例項,不允許有別的activity存在。

例如:程式有三個activityd1,d2,d3,三個activity可互相啟動,其中d2為singleinstance模式。那麼程式從d1開始執行,假設d1的taskid為200,那麼從d1啟動d2時,d2會新啟動乙個task,即d2與d1不在乙個task中執行。假設d2的taskid為201,再從d2啟動d3時,d3的taskid為200,也就是說它被壓到了d1啟動的任務棧中。

若是在別的應用程式開啟d2,假設other的taskid為200,開啟d2,d2會新建乙個task執行,假設它的taskid為201,那麼如果這時再從d2啟動d1或者d3,則又會再建立乙個task,因此,若操作步驟為other->d2->d1,這過程就涉及到了3個task了。

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跳...