啟動模式是通過在androidmanifest.xml中activity標籤中的launchmode設定的
android:launchmode指示應該如何載入乙個activity.總共有四種啟動模式,他們一般配合activity啟動標記(flag_activity_*常量)一起使用來決定當載入乙個actiity時,系統該如何處理這個intent.這四個啟動模式依次是:
"standard"
"singletop"
"singletask"
"singleinstance"
預設的是"standard"
正如在下表中將會看到的一樣,這些啟動on個模式被劃分成兩個組,"standard" 和"singletop"一組,"singletask" 和"singleinstance"屬於另外乙個組。以"standard" 或"singletop"方式啟動的activity可以被例項化很多次,他們的例項也可以屬於任何 task,可以放在棧中的任何位置,典型的,他們一般通過 startactivity() 來載入到task中(除非啟動 intent設定了flag_activity_new_task標記,在這種情況下會選進入乙個不同的task--檢視taskaffinity屬性)
"standard" 和"singletop"在乙個方面不一樣,如果是以"standard"方式啟動的activity,每次都會例項化乙個新的activity例項,每個例項對應乙個intent,類似的,"singletop" 啟動的activity也可能建立乙個新的例項來處理相應的intent,但是,如果目標task棧頂的activity正是要啟動的activity,這個時候不會像"standard" 模式一樣重新建立乙個該activity例項,二十呼叫該activity的onnewintent()方法。在其他情況下,例如"singletop" 模式的activity已經在目標task中,但不是在棧頂,或者已經在棧頂,但不是在目標task中,這個時候,會像"standard" 模式一樣建立乙個該activity的新例項。
"singletask" 和"singleinstance"兩者也略有區別,乙個"singletask" 模式的activity允許其他的activity加入到他的task中,他永遠是該task的root activity,但其他activity可以載入到該task中,相反,乙個"singleinstance"模式的activity獨佔乙個task,不執行其他的task加入到裡面,如果從中啟動activity,這個activity被安排到乙個不同的task中,就像使用了flag_activity_new_task一樣。
就像上表中展示的一樣,"standard"是預設的模式,對於大部分activity來說它都是合適的模式,「singletop」也是乙個非常普遍且有用的模式對大多數activity.另外兩中模式:「singletask」和"singleinstance"對於大多數應用程式來說使用不多。因為他們會導致的互動模式對使用者來說不太熟悉,和其他的應用程式相比也很不同。
不管你選擇那種模式,確保測試一下activity的正確性 當載入它的時候或者從其他activity或者返回按鈕導航到它時。
Android啟動模式
android使用棧來管理activity。android的 啟動模式共4種分別為standard singletop singletask singleinstance。假如firstactivity在棧頂,此時如果繼續構建firstactivity,還會繼續構建firstactivity 如果f...
android啟動模式實踐
現在有乙個需求。從a跳到b,然後b跳到c,c再跳到a,看似很簡單的就可以實現,但是當簡單的跳轉後,發現棧中的activity順序從下到上一次是abca,當我最後跳到a時,返回鍵時,首先出來的是c,依次是b,然後還是a,實際中,這樣是不符合邏輯的,這裡我們就用到了activity的啟動模式。我們將a的...
Android 啟動模式(launchMode)
通過 adb shell dumpsys activity 對於4種launchmode進行分析 standerd 標準啟動模式,在每次啟動activity時都會建立乙個新的activity。歸屬棧 activity會被壓入啟動它的activity所在棧。singletop 如果activity在棧...