activity的啟動模式

2022-06-12 18:39:06 字數 2118 閱讀 9442

有四種啟動模式:standard、singletop、singletask、singleinstance。

可在androidmanifest.xml設定android:launchmode屬性,如:

1

<

activity

2android:name

=".al"

3android:launchmode

="standard"

/>

1.standard

預設模式,可不宣告。預設都會建立乙個新的例項。因此,在該模式下,可以有多個相同的例項,也允許多個相同activity疊加。

例:乙個activity a,點選按鈕會跳轉a。則點選會不斷壓入新的a;點選back鍵會按順序出棧。

2.singletop

允許多個例項,但不允許相同activity疊加。如果處於棧頂的activity呼叫自身,則不會建立新的例項,而會呼叫其onnexintent方法。

例如:若我有兩個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。

3.singletask

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

如果是別的應用程式中啟動它,會建立乙個新的task,並在該task中啟動這個activity。

例如:若我的應用程式中有三個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中的其中乙個。

4.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 啟動模式

在android的中activity 有4種啟動方式 standard singletop singletask singleinstance 下面就分輕重點講講這些啟動方式。1 standard啟動方式 這種方式也是系統預設的。說的簡單點,我們在使用startactivity 方法的時候,系統就會...

activity啟動模式

1 對於使用standard 模式的活動,系統不會在乎這個活動是否已經在返回棧中存在,每次啟動都會建立該活動的乙個新的例項。例如a啟動a,a再接著啟動a,a繼續啟動a,然後再分別出棧,如圖所示 2 當活動的啟動模式指定為 singletop,在啟動活動時如果發現返回棧的棧頂已經是該活動,則認為可以直...

Activity啟動模式

兩種方式可以定義activity啟動模式 manifest intent intent定義的啟動模式優先於manifest 不管activity執行在乙個新的任務還是與啟動它的activity同樣的任務,返回鍵總是把使用者帶到之前的activity。然而,如果啟動乙個singletask的activ...