activity 啟動模式

2021-07-04 15:11:34 字數 1979 閱讀 2107

在android的中activity

有4種啟動方式

:"standard"、"singletop"、"singletask"、"singleinstance"。

下面就分輕重點講講這些啟動方式。

1、standard啟動方式

這種方式也是系統預設的。說的簡單點,我們在使用startactivity()方法的時候,系統就會啟動

乙個新的activity例項,不管它先前啟動沒有。如果想知道具體細節可以檢視這個帖子

我在這裡就不細細講解了。

配圖說明:

2、singletop啟動方式

如果大家把standard啟動方式看懂了,這個我就說一下區別,大家就明白了。如果我們要呼叫的

activity在task棧頂,系統不會像在standard方式下建立乙個新的例項,而是呼叫

onnewintent()方法,來引導intent到棧頂的例項。如果呼叫的

activity不在task棧頂

,系統此時呼叫方式與standard方式下的一模一樣。

舉個例子:

現在task棧元素為a-b-c-d(d在棧頂),這時候給d發乙個啟動intent,如果d是 「standard」的,則生成d的乙個新例項,棧變為a-b-c-d-d。

如果d是singletop的話,則不會生產d的新例項,棧狀態仍為a-b-c-d

如果這時候給b發intent的話,不管b的launchmode是」standard」 還是 「singletop」 ,都會生成b的新例項,棧狀態變為a-b-c-d-b。

注意:在乙個activity處理新的intent的時候,使用者不能使用back button來返回到先前的activity。直到新的intent到達onnewintent()方法中後,才可以。

3、singletask啟動方式

如果已經有其他的task並且包含activity例項,那就直接呼叫那個task的例項。(只有乙個task中會有)

而不是建立乙個新的例項。重點:假如你啟動乙個singletask的activity,同時這個activity在background task中,那麼整個

background task都會被調入到前台來。下面這幅圖就很好的說明這個問題。

有人問如果我呼叫圖中的activity x,會怎樣?系統會先把activity y銷毀,然後再將activity x放到前台。

4、singleinstance啟動方式

singleinstance 新建乙個task,且在該task中只有它的唯一乙個例項。 (只有乙個task會有,且該task中只有它)。

「singleinstance」是其所在棧的唯一activity,它會每次都被重用。

總結:standard  每次都會新建,每個task都可以有,且每個task都可以有多個例項(每個task都可以有,且可以有多個)

singletop 當前例項如果在棧頂,就不新建例項,呼叫其onnewintent。 如不在棧頂,則新建例項 (每個task都可以有,且可以有多個,在棧頂時可復用)

singletask 新建乙個task,如果已經有其他的task並且包含該例項,那就直接呼叫那個task的例項。(只有乙個task中會有)

singleinstance 新建乙個task,且在該task中只有它的唯一乙個例項。 (只有乙個task會有,且該task中只有它)

intent的flag可以覆蓋activity的啟動模式:

flag_activity_new_task  類似singletask

flag_activity_single_top 類似singletop 

flag_activity_clear_top 無對應

補充說明裡面遺漏的東西。

使用者一定要能夠離開乙個task,和再回到這個task。所以,"singletask"和"singleinstance",只能用作啟動activity的屬性。如果不這樣,我們在啟動乙個singletask的activity之後,使用home鍵到主介面,就會回不去了,因為它不代表乙個應用的啟動。

**:

activity啟動模式

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

Activity啟動模式

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

Activity啟動模式

activity一共有以下四種launchmode standard singletop singletask singleinstance standard 不管有沒有已存在的例項,都會生成新的例項 預設模式 singletop 如果有對應的activity例項正位於棧頂,就重複利用,沒有處於棧頂...