以下內容整理自互聯網,僅用于個人學習
在Android的AndroidManifest.xml文件中可以對Android的啟動模式進行配置,需要添加如下代碼:
android:launchMode="XXX"
standard(標準模式)
這是Android默認的啟動模式,每次啟動一個Activity都會創建一個新的實例,不管這個實例是否存在。
singleTop
棧頂復用的模式,如果Activity已經位于活動棧的棧頂,那么此Activity不會被重新創建,同時onNewIntent方法會被回調。如果Activity已存在但不在棧頂,那么新的Activity還是會被重新創建。
singleTask
棧內復用的模式,只要Activity在一個棧內已存在,就不會創建新的實例。
在啟動activity的時候,首先查看Activity想要的任務棧是否存在,如果不存在就重新創建一個任務棧,然后創建該Activity實例并放入新棧中。如果存在Activity想要的任務棧,看該Activity是否在棧中存在實例,如果存在,則將該實例上面所有的Activity出棧,使其位于棧頂并回調onNewIntent.通過TaskAffinity屬性指定Activity想要的任務棧。
singleInstance
單例模式。這是一種加強的singleTask,具有此種模式的Activity只能單獨的位于一個任務棧中。除非該任務棧被銷毀,否則不會重新創建該Activity。
Activity的Flag
- FLAG_ACTIVITY_NEW_TASK:這個標記作用是為Activity指定“singleTask”啟動模式,其效果和在XML中指定該啟動模式相同。
- FLAG_ACTIVITY_SINGLE_TOP:這個標記位作用是為Activity指定“singleTop”啟動模式,其效果和在XML中指定該啟動模式相同。
- FLAG_ACTIVITY_CLEAR_TOP:具有此標記的Activity,當它啟動時,在同一個任務棧中所有位于它上面的Activity都要出棧。這個標記一般會和singleTask啟動模式一起出現,在這種情況下,被啟動Activity的實例如果已經存在,那么系統會調用它的onNewIntent。如果被啟動的Activity采用standard模式啟動,那么它連同它之上的Activity都要出棧,系統會創建新的Activity實例,并放入棧頂。singleTask默認就具有此標記效果。
- FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS:具有這個標記的Activity不會出現在歷史Activity的列表中,當某些情況下,我們不希望用戶通過歷史列表回到我們的Activity的時候這個標記比較有用。它等同于在XML中指定Activity的屬性:android:excudeFromRecents="true"