Activity啟動模式解析

2021-09-12 15:49:35 字數 2013 閱讀 9286

standard預設標準模式:

每啟動一次,就建立乙個新例項,並放到棧頂,並且該例項放在同樣的任務task中、同樣的activity棧中。不會再新建立棧、task。

singletop模式:

同標準standard模式差不多,只不過多了一種情況,分為兩種情況來看:

如果棧中已經有了待啟動activity例項並且位於棧頂,那麼再次啟動該activity時,系統會直接復用該例項,不會再建立新的例項;如果沒有,就新建立例項,並放到棧頂;

如果棧中已經有了待啟動activity例項,但不在棧頂,那麼再次啟動該activity時,系統會再次建立新的例項並將該例項放到棧頂,這種情況和standard模式一樣。

singletask模式:

如果棧中已經有了待啟動activity例項並且位於棧頂,那麼再次啟動該activity時,系統會直接復用該例項,不會再建立新的例項;如果沒有,就新建立例項,並放到棧頂;

如果棧中已經有了待啟動activity例項但不在棧頂,那麼再次啟動該activity時,系統會復用已有例項,並且把位於該例項之上的所有其他activity例項移出棧,同時將該例項放在棧頂。

singleinstance模式:

如果棧中沒有待啟動activity例項,啟動該activity時,系統會新建立乙個task,再建立乙個待啟動activity例項,把該例項放到新task中,並且該task會在棧頂;

如果棧中已經有了待啟動activity例項,不管在棧的什麼位置,系統都會復用已存在例項,並且把該例項放在棧頂,而且該task中只有乙個該例項,不會再有第二個例項,也不會有其他activity例項;

如果乙個應用中有多個activity都設定成singleinstance模式,那麼每個啟動後的activity例項都儲存在乙個task中,不會在同乙個task中,task和例項是一對一關係。

standard、singletop存在多種例項的可能(「可能」二字表明,singletop情況下,如果棧頂已有例項,再次啟動時只會復用,如果不在棧頂,就會新建立例項);而singletask和singleinstance只有乙個例項,再次啟動時不會建立新例項;

singletask和singleinstance模式,再次呼叫時都會先呼叫onnewintent方法,再呼叫onresume方法;對於singletop,如果棧頂已有例項,也是先呼叫onnewintent方法,再呼叫onresume方法,如果不在棧頂或者還沒有例項,就會先呼叫oncreate方法;

singleinstance模式不同於其他三種,首次啟動時會新開啟乙個task,該task只包含乙個例項;再次啟動時只會復用該task,不再新建立。

上面分析了在同一應用中的情況,再看看不同應用之間的情形。通過測試得知:

standard、singletop沒有什麼改變,還是在在同樣的棧、task中;singleinstance模式下也沒有改變,還是會建立新的task並儲存唯一例項;但singletask卻不一樣,首次啟動時,系統會在當前棧中建立乙個新的task,再次啟動時,復用已有task;而在同一應用中,再次啟動時,不會再建立新task的,直接復用已有task。

不管是同一應用中還是不同應用之間,standard、singletop、singleinstance各自沒有區別,只有singletask不一樣,同一應用中不建立新的task,不同應用中有可能會建立新的task。(注:這裡用到了「可能」二字,沒有用「一定」,是因為這與taskaffinity屬性有關,如果設定了此屬性,就會在該屬性對應的task中啟動例項,否則,會建立新的task)。

使用singletask也能獲取onactivityresult,只要在同乙個task之中。

設定了taskaffinity之後,如果使用startactivityforresult()開啟activity,那麼會忽略taskaffinity的效果,不會將開啟的activity置入以taskaffinity為命名的任務棧中;如果使用startactivity()方式開啟,那麼會新建乙個以taskaffinity為命名的任務棧,並將開啟的activity置於其中。

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