安卓基礎之Activity的四種啟動模式
Activity的四種啟動模式
Activity的啟動模式在清單檔案中配置:
<activity ...
activity:lauchMode:"..."; //有四種模式選擇,如不設定,預設為standard模式
1、standard :標準的啟動模式
系統的預設模式,一次跳轉即會生成一個新的例項。假設有一個activity命名為A1,執行語句:
startActivity(new Intent(A1.this, A1.class));
後A1將跳轉到另外一個A1,也就是現在的棧裡面有 A1的兩個例項。按返回鍵後你會發現仍然是在A1(第一個)裡面。
2、singleTop:單一頂部模式
singleTop 跟standard 模式比較類似。唯一的區別就是,當跳轉的物件是位於棧頂的activity(應該可以理解為使用者眼前所 看到的activity)時,程式將不會生成一個新的activity例項,而是直接跳到現存於棧頂的那個activity例項。拿上面的例子來說,當A1 為 singleTop 模式時,執行跳轉後棧裡面依舊只有一個例項,如果現在按返回鍵程式將直接退出。
理解:如果Activity已經被啟動,並且處於任務棧的棧頂,就不會建立新的Activity,而是複用這個已經開啟的Activity.為了防止出現一些奇怪的現象,推薦使用單一頂部模式.整個任務棧可以有多個例項存在
3、singleTask:單一任務棧
singleTask模式和後面的singleInstance模式都是隻建立一個例項的。在這種模式下,無論跳轉的物件是不是位於棧頂的activity,程式都不會生成一個新的例項(當然前提是棧裡面已經有這個例項)。這種模式相當有用,在以後的多activity開發中, 經常會因為跳轉的關係導致同個頁面生成多個例項,這個在使用者體驗上始終有點不好,而如果你將對應的activity宣告為 singleTask 模式,這種問題將不復存在。
理解:在整個任務棧裡面只允許有當前一個Activity的例項存在.如果要開啟的Activity在任務棧裡面已經存在,直接服用這個已經存在的Activity,並且把這個Activity上面的所有其他的Activity給清空
應用場景:如果一個Activity非常消耗記憶體和Cpu資源,建議吧這個Activity做成singleTask的模式,瀏覽器的browserActivity
4、singleInstance: 單一例項
設定為 singleInstance 模式的 activity 將獨佔一個task(task可以理解為程序),獨佔一個task的activity與其說是activity,
倒不如說是一個應用,這個應用與其他activity是獨立的,它有自己的上下文activity。
理解:整個手機作業系統只有一個例項存在,並且是執行在自己單獨的任務棧裡面
應用場景:來電頁面
參考網頁:https://blog.csdn.net/sglh0707/article/details/52872502