Android的啟動模式分為四種:
standard
模式啟動模式,每次激活Activity時都會創建Activity,並放入任務棧中。
singleTop
如果在任務的棧頂正好存在該Activity的實例, 就重用該實例,否者就會創建新的實例並放入棧頂(即使棧中已經存在該Activity實例,只要不在棧頂,都會創建實例)。
singleTask
如果在棧中已經有該Activity的實例,就重用該實例(會調用實例的onNewIntent())。重用時,會讓該實例回到棧頂,因此在它上面的實例將會被移除棧。如果棧中不存在該實例,將會創建新的實例放入棧中。
singleInstance
在一個新棧中創建該Activity實例,並讓多個應用共享改棧中的該Activity實例。一旦改模式的Activity的實例存在於某個棧中,任何應用再激活改Activity時都會重用該棧中的實例,其效果相當於多個應用程序共享一個應用,不管誰激活該Activity都會進入同一個應用中。
standard
standard是系統默認的啟動模式,每次創建都是在堆上放一個新的Activity。
這裡就不多介紹了。
singleTop
每次使用新的Activity時會自動檢測棧頂的當前Activity是否是需要引用的Activity,如果是則直接引用此Activity,而不會創建新的Activity。
<activity
android:name=".Activity2"
android:label="singleTop"
android:launchMode="singleTop" >
</activity>
其效果是最頂層是singleTop的話,再點擊singleTop按鈕不會創建新的Activity。
image
singleTask
此啟動模式和singleTop在名字上即可看出區別,即singleTop每次只檢測當前棧頂的Activity是否是我們需要請求創建的,而singleTask則會檢測棧中全部的Activity對象,從上向下,如果檢測到是我們所請求的則會消滅此Activity對象上面的對象,直接把檢測到的我們需要的Activity置為棧頂。
<activity
android:name=".Activity4"
android:launchMode="singleTask"
android:label="singleTask" >
</activity
其效果是點擊singleTask之後點擊多個standard,再點singleTask,那些standard都沒了。
image
singleInstance
此啟動模式和我們使用的浏覽器工作原理類似,我們都知道在多個程序中訪問浏覽器時,如果當前浏覽器沒有打開,則打開浏覽器,否則會在當前打開的浏覽器中訪問。此模式會節省大量的系統資源,因為他能保證要請求的Activity對象在當前的棧中只存在一個。