android activity 四大啓動模式及使用場景

轉載自:https://blog.csdn.net/YeeCeeYee/article/details/64958184

android activity的啓動模式有4種。分別是standard,singleTop,singleTask和singleInstance。在AndroidManifest.xml中,通過標籤的android:launchMode屬性可以設置啓動模式。

standard模式

standard時activity默認的啓動模式,在不指定Activity啓動模式的情況下,所有activity使用的都是standard模式。
在standard模式下,每當啓動一個新的activity,他就會進入任務棧,並處於棧頂的位置,對於使用standard模式的Activity,系統不會判斷該activity在棧中是否存在,每次啓動都會創建一個新的實例。
這裏寫圖片描述

singleTop模式

singleTop模式與standard類似,不同的是,當啓動的activity已經位於棧頂時,則直接使用它不創建新的實例。如果啓動的activity沒有位於棧頂時,則創建一個新的實例位於棧頂。下圖是singleTop模式下activity在棧中的存放情況:
這裏寫圖片描述
從圖中可以看出,當前棧頂的元素是Activity03,如果再次啓動的界面還是Activity03,則複用當前棧頂的Activity實例,如果再次啓動的界面沒有在棧頂,則會重新創建一個實例。

使用場景

singleTop是和接收通知啓動的內容顯示頁面。例如,某個新聞客戶端的新聞內容頁面,如果收到10個新聞推送,每次都打開一個新聞內容頁面就不合理了。

singleTask模式

如果希望Activity在整個應用程序中只存在一個實例,可以使用singleTask模式,當activity的啓動模式指定爲singleTask,每次啓動該activity時,系統首先會檢查棧中是否存在該activity的實例,如果存在,就直接使用該實例,並將當前activity之上的所有activity出棧,如果沒有發現則創建一個新的實例。下入所示的是singleTask模式下的activity在棧中的存放情況。
這裏寫圖片描述
從圖中可以看出,當再次啓動activity02時,並沒有創建新的實例,而是將activity03實例移除,複用activity02實例,讓某個activity只在當前棧中只存在一個實例。

使用場景

最常見的應用場景就是保持我們應用開啓後僅僅有一個activity實例,最典型的樣例就是應用中展示的主頁(Home頁)
假設用戶在主頁跳轉到其他頁面,運行多次操作後想返回到主頁,假設不使用singletask模式,在點擊返回的過程中會多次看到主頁,這明顯就是設計不合理了。

singleInstance模式

在程序開發過程中,如果需要activity在整個系統中都只有一個實例,這時需要用到singleInstance模式。不同於以上介紹的三種模式,指定爲singleInstance模式的activity會啓動一個新的任務棧來管理這個activity。
singleInstance模式加載activity的時候,無論從哪個任務棧中啓動該activity,只會創建一個activity實例,並且會使用一個全新的任務棧來裝載該activity實例,採用這種模式啓動activity分爲兩種情況:
1、如果要啓動的activity不存在,系統會創建一個新的任務棧,再創建該activity的實例,並把該activity加入棧頂,如下圖:
這裏寫圖片描述
2、如果要啓動的activity已經存在,無論位於哪個應用程序或者哪個任務棧中,系統都會把該activity所在的任務棧轉到前臺,從而使該activity顯示出來,

使用場景

singleInstance適合需要與程序分離的頁面,例如鬧鈴提醒,將鬧鈴提醒與鬧鈴設置分離,singleInstance不要用於中間頁面,如果用於中間頁面,跳轉會有問題,比如;A->B(singleInstance)->C,完全退出後,再次啓動,首先打開的是B.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章