activity的四種啓動模式
在開始學習之前,我們必須知道一些事情
①:我們平常所說的 task stack(任務棧),是針對於activity而言的
②:任務棧其實就是一個後進先出的鏈表,記錄和維護了當前開啓的activity。
一般情況下,退出一個activity,就是把這個activity從任務棧棧頂移除.
③:如果棧頂空了,任務棧將會被回收,應用程序關閉,但,注意!! -- 進程其實還是存在的,等待其他任務進
入該線程.
【標準模式】 --- 一般情況
標準模式也是默認模式,在沒有指定打開方式的時候默認使用標準模式
我們來做個程序實驗一下,首先我們做兩個activity
界面如下圖:
在配置文件中配置啓動模式
這時,我們點擊的順序爲:第二個activity-->第一個activity-->第一個activity
此時在任務棧中的情況爲
我們點擊模擬器/真機的返回鍵,依次出現的界面依次爲:
第一個activity(點擊前)-->第一個activity(點擊一次)-->第二個activity(第二次點擊)
-->第一個activity(第三次點擊)-->返回應用程序界面(第四次點擊)
總結:每發送一個請求都會打開一個相應的activity,即使它已經重複,但依然要打開新的activity
【singleTop】 --- 特殊情況
singleTOP,這種模式和標準模式的區別在於:當你發起一個開啓activity的請求時,它會第一時間去任務棧的最頂端查找,如果你要打開的是activity和頂棧中的activity一致時,它不會再次開啓,值得注意的是,只要你請求打開的不是頂棧中的activity它都會開啓一個新的activity,不管它之前是否打開過,是否存在
依然是上個案例中用到的例子,這次我們把啓動模式設置爲下圖所示:
此時我們打開應用,點擊Bution的順序爲
第二個activity --> 第一個activity --> 第一個activity
那麼,在任務棧中的爲:
當我們連續兩次點擊activity01時,它只會開啓一個
我們點擊模擬器/真機的返回鍵,依次出現的界面依次爲:
第一個activity(點擊前)-->第二個activity(第一次點擊)
-->第一個activity(第二次點擊)-->返回應用程序界面(第三次點擊)
【singleTask】 --- 特殊情況
singleTask --- 它的作用是,當你發送一個啓動activity A的請求時,它會先去任務棧中去查找是否存在你要開啓的activity A,如果有,清空這個任務棧中activity A上面的所有的activity,複用activity A
現在我們把配置文件中的activity啓動模式改爲
我們發佈項目,然後打開app,點擊Button的順序爲:
第二個activity --> 第一個activity
那麼此時在任務棧中的情況爲:
所以我們點擊一次後退鍵即可退出程序
【singleInstance】 --- 極特殊
singleInstance --- 它是一種及其特殊的啓動方式,使用該啓動模式的activity將會獨自創建一個任務棧,這個任務棧中只存放一個該activity的實例,根據用戶點擊的順序對所有的任務棧進行排序。
也就是說:如果activity01被開啓,把activity01所在的任務棧放在最前面,如果此時又開啓了新的activity02,那麼activity02所在任務棧會被放置在activity01前面
我們來舉個例子,現在我們把配置文件中activity的啓動模式改爲下圖所示:
那麼,我們將項目部署下,打開app --- > 進入activity01界面
點擊進入第一個activity,我們發現頁面並沒有任何反應,而當我們點擊進入第二個activity,此時應用的反應如同開啓了一個新的app似的,很明顯第一個activity的界面先是縮小,然後activity02出現。
此時的任務棧中的情形如圖:
若我們再點擊進入第一個activity,
也就是說,你想看到誰,誰就被放在前方,好似插隊一般,把剛點擊的activity放在隊伍的最前方
不管點擊幾次Button我們只需要點擊兩次返回,即可關閉程序
以上就是我對activity4種啓動模式的理解,希望可以幫到你
歡迎轉載,請註明出處,謝謝