在AndroidManifest.xml文件中可以修改activity的啟動模式,默認(rèn)是standard標(biāo)準(zhǔn)模式,另外還有singleTop、singleInstance、singleTask三種,各個啟動模式的區(qū)別在于啟動activity時,是否創(chuàng)建新的任務(wù)棧,是否創(chuàng)建新的實例。
為便于觀察,除mainActivity之外,新建一個newActivity,并在兩個頁面上各自添加一個textview顯示當(dāng)前頁面所在任務(wù)棧的taskId和當(dāng)前實例id,每個頁面添加兩個按鈕,點擊后分別跳轉(zhuǎn)到mainActivity和newActivity
standard標(biāo)準(zhǔn)模式
- 啟動程序 -->顯示main頁面-->taskId : 58,instanceId:@58bc6ee
- 點擊main按鈕-->顯示main頁面-->taskId : 58,instanceId:@1289aba
- 點擊new按鈕-->顯示new 頁面-->taskId : 58,instanceId:@925c77d
- 點擊main按鈕-->顯示main頁面-->taskId : 58,instanceId:@9a71cc7
- 點擊new按鈕-->顯示new 頁面-->taskId : 58,instanceId:@9a32a43
- 點擊后退按鈕-->顯示main頁面-->taskId : 58,instanceId:@9a71cc7
- 點擊后退按鈕-->顯示new 頁面-->taskId : 58,instanceId:@925c77d
- 點擊后退按鈕-->顯示main頁面-->taskId : 58,instanceId:@1289aba
- 點擊后退按鈕-->顯示main頁面-->taskId : 58,instanceId:@58bc6ee
- 點擊后退按鈕-->回到桌面
由此可見,標(biāo)準(zhǔn)模式下,跳轉(zhuǎn)activity時只創(chuàng)建一個任務(wù)棧,每次跳轉(zhuǎn)都創(chuàng)建新的實例。
singleTop模式
- 啟動程序 -->顯示main頁面-->taskId : 59,instanceId:@58bc6ee
- 點擊main按鈕-->顯示main頁面-->taskId : 59,instanceId:@ 58bc6ee
- 點擊new按鈕-->顯示new 頁面-->taskId : 59,instanceId:@72c2561
- 點擊new按鈕-->顯示new 頁面-->taskId : 59,instanceId:@72c2561
- 點擊main按鈕-->顯示main頁面-->taskId : 59,instanceId:@ f2db93d
- 點擊main按鈕-->顯示main頁面-->taskId : 59,instanceId:@ f2db93d
- 點擊new按鈕-->顯示new 頁面-->taskId : 59,instanceId:@69defd5
- 點擊new按鈕-->顯示new 頁面-->taskId : 59,instanceId:@69defd5
- 點擊后退按鈕-->顯示main頁面-->taskId : 59,instanceId:@f2db93d
- 點擊后退按鈕-->顯示new頁面-->taskId : 59,instanceId:@72c2561
- 點擊后退按鈕-->顯示main頁面-->taskId : 59,instanceId:@58bc6ee
- 點擊后退按鈕-->回到桌面
在singleTop模式下,跳轉(zhuǎn)activity時只創(chuàng)建一個任務(wù)棧,與標(biāo)準(zhǔn)模式不同之處在于:如果被啟動的activity處于棧頂,則不創(chuàng)建新實例,如果不處于棧頂,則會創(chuàng)建新實例
singleTask模式
- 啟動程序 -->顯示main頁面-->taskId : 60,instanceId:@58bc6ee
- 點擊main按鈕-->顯示main頁面-->taskId : 60,instanceId:@ 58bc6ee
- 點擊new按鈕-->顯示new 頁面-->taskId : 60,instanceId:@72c2561
- 點擊new按鈕-->顯示new 頁面-->taskId : 60,instanceId:@72c2561
- 點擊main按鈕-->顯示main頁面-->taskId : 60,instanceId:@58bc6ee
- 點擊main按鈕-->顯示main頁面-->taskId : 60,instanceId:@58bc6ee
- 點擊new按鈕-->顯示new 頁面-->taskId : 60,instanceId:@f2db93d
- 點擊new按鈕-->顯示new 頁面-->taskId : 60,instanceId:@f2db93d
- 點擊后退按鈕-->顯示main頁面-->taskId : 60,instanceId:@58bc6ee
- 點擊后退按鈕-->回到桌面
singleTask模式下,啟動新activity只會創(chuàng)建一個任務(wù)棧,在創(chuàng)建新實例的時候,會把同一個activity之前的實例彈出,所以在點擊后退按鈕的時候,newActivity不會再次顯示。
singleInstance模式
- 啟動程序 -->顯示main頁面-->taskId : 61,instanceId:@58bc6ee
- 點擊main按鈕-->顯示main頁面-->taskId : 61,instanceId:@58bc6ee
- 點擊new按鈕-->顯示new 頁面-->taskId : 62,instanceId:@72c2561
- 點擊new按鈕-->顯示new 頁面-->taskId : 62,instanceId:@72c2561
- 點擊main按鈕-->顯示main頁面-->taskId : 61,instanceId:@58bc6ee
- 點擊main按鈕-->顯示main頁面-->taskId : 61,instanceId:@58bc6ee
- 點擊new按鈕-->顯示new 頁面-->taskId : 62,instanceId:@f2db93d
- 點擊new按鈕-->顯示new 頁面-->taskId : 62,instanceId:@f2db93d
- 點擊后退按鈕-->顯示main頁面-->taskId : 61,instanceId:@58bc6ee
- 點擊后退按鈕-->回到桌面
singleInstance模式下,一個任務(wù)棧只存在一個實例,切換activity的時候會切換任務(wù)棧。
還不知道在實際項目中怎么應(yīng)用,希望后續(xù)可以了解到