啟動模式分為4種,分別為standard,singleTop,singleTask,和singleInstance我們可以在AndroidManifest.xml中通過給<activity>標簽指定android:launchMode屬性來選擇啟動模式。
- standard
standard是活動默認的啟動模式。在standard模式下,每當啟動一個新的活動,它就會在返回棧中入棧,對于使用standard模式的活動,系統不會在乎這個活動是否已經在返回棧中存在,每次啟動都會創建該活動的一個新的實例。
- singleTop
活動明明已經在棧頂了,為什么再次啟動的時候,還要創建一個新的活動實例呢?,開始討論singleTop模式,當活動的啟動模式指定為singleTop,在啟動活動時發現返回棧的棧頂已經是該活動,則認為可以直接使用它,不會再創建新的活動實例。
不過當FirstActivity并未處于棧頂位置時,這時再啟動FirstActivity,還是會創建新的實例的。
- singleTask
使用singleTop模式可以很好地解決重復創建棧頂活動的問題,但是如果該活動并沒有處于棧頂的位置,還是可能會創建多個活動實例的。可以借助singleTask模式來實現讓某個活動在整個應用程序的上下文只存在一個實例。當活動的啟動模式指定為singTask,每次啟動該活動時系統都會首先在返回棧中檢查是否存在該活動的實例,如果發現已經存在則直接使用該實例,并把這個活動之上的活動統統出棧,如果沒有發現就會創建一個新的活動實例。
- singleInstance
當一個活動指定為singleInstance模式會啟用一個新的返回棧來管理這個模式,我們假設程序是允許其他程序調用的,如果我們想實現其他程序和我們的程序可以共享這個活動的實例,如何實現?正因為有一個單獨的返回棧管理這個活動,不管是哪個應用程序來訪問這個活動,都共用的同一個返回棧,也就解決共享活動實例的問題。