四種啓動模式:
1)standard(默認)
2)singleTop
3) singleTask
4) singleInstance
1. standard啓動模式
standard啓動模式是一直Android開發過程中默認的啓動方式,在standard啓動模式下,每次啓動一個新的活動,它就會把這個活動加入到返回棧中,並處於棧頂的位置。這種啓動方式,不管返回棧中有沒有存在這個活動,每次都會創建一個這個活動的實例放到返回棧中。如果返回棧已經存在活動A,再次啓動活動A的時候,返回棧的活動爲 A --> A 。如下左圖:
點擊返回之後,返回棧中棧頂的活動移除,如右圖:
<activity
android:name=".FirstActivity"
android:launchMode="standard"
android:screenOrientation="portrait">
2. singleTop啓動模式
當活動的啓動模式指定爲singleTop,在啓動活動時,如果發現該返回棧的棧頂已經是該活動時,則認爲可以直接使用它,不會再創建新的活動實例,如果該活動已經處在棧頂,則直接複用該活動。並且會調用該實例的onNewIntent()方法將 Intent 對象傳遞到這個實例中。
<activity
android:name=".Activity"
android:launchMode="singleTop"
android:screenOrientation="portrait">
3. singleTask啓動模式
當活動使用singleTask啓動模式時,返回棧中只有一個該 Activity 實例。如果系統中已經有了一個實例, 持有這個實例的任務將移動到頂部,同時把該活動上方的活動移出返回棧,且 intent 將被通過 onNewIntent()發送。 如果沒有,則會創建一個新的Activity 並置放在返回棧中。如果返回棧中活動如下左圖,當重新啓動BActivity時,CActivity被移出棧頂,返回棧如右圖所示:
<activity
android:name=".BActivity"
android:launchMode="singleTask"
android:screenOrientation="portrait">
4. singleInstance啓動模式
使用singleInstance啓動模式是活動,啓動 Activity 只會創建一個 Activity 實例,並將它加入新的 Task棧頂,該棧中只有該活動,也就是說被該實例啓動的其他 activity 會自動運行於另一個 Task 中。 當再次啓動該activity 的實例時,會重用已存在的任務和實例。並且會調用這個實例 的 onNewIntent()方法,將 Intent 實例傳遞到該實例中。和 singleTask 相同, 同一時刻在系統中只會存在一個這樣的 Activity 實例。
<activity
android:name=".Activity"
android:launchMode="singleInstance"
android:screenOrientation="portrait">