1. 程式人生 > >安卓基礎之Activity的四種啟動模式

安卓基礎之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