Android中四種啟動模式,最容易理解的小白教程
說起Android中的啟動模式,其實是個很基礎的內容,誰都知道是4中啟動模式,沒錯分別是以下四種:
1,standard
2,singleTop
3,singleTask
4,singleInstance
關於高深的純理論說明這裡就不多做贅述,畢竟文字說明太饒人,這裡就準備說點簡單的,能看得見的,現在開始吧。
第一種:standard(預設)
關於這種模式,大家都知道,就是Android預設的啟動模式,就是不顯示指定,就是這種模式。現在有FirstActivity和SecondActivity兩個介面,程式碼裡都列印了當前例項和taskId,格式為xx/xx
測試情景:重複跳轉自己(自己設定standard)
794為task的Id,前面的為當前例項物件,可見每次都是新建的,並不是複用的。@f37d177是第一個頁面,一共跳轉了三次。同樣退出應用也用了三次。

結論:standard模式下,會不斷地新建activity例項,都放入同一個task中
第二種:singleTop
測試情景一:重複跳轉自己(自己設定singleTop)
看起來好像沒有點選一樣,其實是點選了的,注意看Actionbar上的點選計數,點選了3次,三次的例項和taskId都是沒有變化的,且最後退出應用就用了一次點選,如下圖:

測試情景二:迴圈跳轉到目標頁面(SecondActivity設定singleTop)
可以看到兩次跳轉到SecondActivity時,例項都不一樣,且最後返回到桌面也是和進入的次數一樣多。這裡進入了兩次SecondActivity,且最終從SecondActivity退出應用,一共用了4次,如下圖

結論:顧名思義,singleTop,如果當前例項在當前的task的棧頂,則直接複用,測試情景一;如果當前例項不再棧頂,則新建例項,如測試情景二,因為每次都是從FirstActivity跳轉到SecondActivity的,雖然第二次跳轉到SecondActivity的時候已經存在了SecondActivity例項,可是因為不在棧頂,所以又新建了一個SecondActivity例項。
第三種:singleTask
測試情景一:重複跳轉自己(自己設定singleTask)
跳轉了自己4次,可以看到例項和taskId都是沒有變化,且最後一次就能退出應用,如下圖:

測試情景二:迴圈跳轉到目標頁面(SecondActivity設定singleTask)
這裡我們注意到一開始FirstActivity的例項為a2c5349,然後跳轉到SecondActivity一直都是5d5dd2a,而且taskId兩個介面也是一致的,最後在SecondActivity按了一次返回鍵,這裡直接返回到了最初的5349例項介面,也就是第一個介面,如下圖:

結論:設定了singleTask的頁面,只要是task中有這個例項,就會一直複用,而且每次複用這個已存在的例項,都會清空上面的其他例項(這裡的FirstActivity),將自己直接提升到棧頂位置,也就是顯示自己
第四種:singleInstance
測試情景一:重複跳轉自己(自己設定singleInstance)
跳轉了5次,但是可以發現例項和task的值都沒有變化,退出應用也只是一次退出,如下圖:

測試情景二:迴圈跳轉到目標頁面(SecondActivity設定singleInstance)
可以看到一開始從FirstActivity跳轉跳轉到SecondActivity的時候,taskId發生了變化,FirstActivity的id是863,但是跳轉到SecondActivity的時候變成了864,然後後面每次跳轉到SecondActivity的時候例項和task的id都是沒有變化;說說返回的場景
如果最後從FirstActivity返回,那麼會把之前壓入棧的FirstActivity全部返回完之後才是SecondActivity頁面,然後一次就能退出應用;
如果最後從SecondActivity頁面返回,那麼一次就回到FirstActivity,然後把之前壓入棧的FirstActivity全部返回完就退出了應用;
壓入棧的如下圖所示:

結論:設定了singleInstance的頁面,初始時都是新建一個task棧給這個頁面,然後後面一直複用這個棧內的頁面。注意,只有這種模式會新建一個棧給初始化的頁面。最後返回的規律是,先把本頁面所在的棧頭出完,然後再出下一個棧的每個頁面。
至此,四種模式簡單分析完畢,希望能給大家一個直觀的理解