Activity的啟動模式

2022-09-19 01:21:15 字數 1128 閱讀 8275

standard、singletop、singletask、和singleinstance

預設啟動模式,每次啟動乙個activity都會重新建立乙個activity新的例項,不管這個例項是否已經存在。被建立的例項的生命週期符合典型情況下的activity生命週期,乙個任務棧中可以有多個例項,每個例項也可以屬於不同的任務棧。在這種模式下,誰啟動了這個activity,那麼這個activity就執行在啟動它的那個activity所在的棧中。比如activity a啟動了activity

這種模式下,如果新的activity已經位於任務棧的棧頂,那麼此activity不會被重新建立,同時他的onnewintent方法會被**。但是如果新的activity的例項已存在但不是位於棧頂,那麼新activity仍然會被重新建立。舉個例子,假設目前的棧內情況為abcd,a位於棧底,d位於棧頂,這個時候再啟動d,如果d的啟動模式為singletop,那麼棧內的情況仍為abcd,如果d的啟動模式為standard,那麼由於d被重新建立,導致棧內的情況為abcdd。

這是一種單例項模式,在這種模式下,只要activity在乙個棧中存在,那麼多次啟動此activity都不會重新建立例項,和singletop一樣,也會**他的onnewintent。當乙個具有singletask模式的activity請求啟動後,系統會首先尋找是否存在a想要的任務棧,如果不存在,就重新建立乙個任務棧,然後建立a的例項後把a放到棧中,如果存在a所需的任務棧,這時要看a是否在棧中有例項存在,如果存在,那麼系統就會把a調到棧頂並呼叫它的onnewintent方法,如果不存在,就建立a的例項並把a壓入棧中。例如,如果d所需的任務棧為s1,並且當前任務棧s1的情況為adbc,根據棧內復用的原則,此時d不會被重新建立,系統會把d切換到棧頂並呼叫其onnewintent方法,同時由於singletask預設具有cleartop的效果,會導致棧內所有在d上面的activity全部出棧,於是s1最終的情況為ad

這是一種加強的singletask模式,他出了具有singletask模式的所以特性外,還加強了一點,那就是具有此種模式的activity只能單獨的位於乙個任務棧中,換句話說,如果activity a是singleinstance模式,當a啟動後,系統會為它建立乙個新的任務棧,然後a獨自在這個新的任務棧中,由於棧內復用的特性,後續的請求均不會建立新的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...