1. 程式人生 > 其它 >【Android】安卓四大元件之Activity(三)

【Android】安卓四大元件之Activity(三)

# 【Android】安卓四大元件之Activity(三)
## 前言
在之前的activity介紹中我們理解了activity中的頁面跳轉資訊傳遞生命週期,在這一章節,我們對activity的啟動模式進行學習
## 1、瞭解任務棧
棧(stack)是非常常見的資料結構,就是有著後進先出的特性。
那麼任務棧其實就是將我們的每一個activity當作一個元素進棧
一個最好懂的例子——拼夕夕APP,從“每日領現金”頁面,點選跳轉到“簽到領紅包”頁面,再點選跳轉到“幫忙砍一刀”頁面,那麼其中的任務棧就是如圖
activity的不同啟動模式,會導致activity在任務棧中的狀態不一樣,下面我會來一一介紹
首先需要知道的是,如何設定啟動模式?
## 2、如何設定啟動模式?
我們只需要在manifest.xml中的activity中進行android:launchMode=""的設定就可以了,例如我這裡使用standard模式:
```xml
<activity android:name=".study.test.CameraActivity" android:exported="true"
android:launchMode="standard">
```
launchMode一共有如下幾種,我們來一一介紹
## 3、standard啟動模式
最常見的模式,也是預設的啟動模式。activity在這種啟動模式下就和剛剛舉的拼夕夕的例子一樣,每一個新的activity都是任務棧中的新棧頂,而按下BACK鍵當前activity被銷燬,任務棧中該activity執行出棧操作,被銷燬!
使用場景:絕大多場景預設使用
例子:(點選跳轉到新生成的當前的activity,一共點選了3次,按下返回鍵4次回到主螢幕)
## 4、singleTop啟動模式
看名字就知道,top,其實就是當前這個啟動了帶有這個啟動模式的activity,那麼就是在棧頂`了,如果當前activity在棧頂,無法被新的自己這個activity啟動
使用場景:瀏覽器的書籤應用推送...
- 書籤點選一次和點選多次,都是跳轉到標記的地方,只會跳轉一次
- 同理,應用推送為了減少開銷,每次點選不同的推送,都是確保僅開了一個程序儲存在任務棧頂
例子:(已知點選新生成自己,未進行跳轉,點選一次back就返回主螢幕)
## 5、singleTask啟動模式
singleTask就是單一任務
具體例子:
- activity A是 standard
- activity B是 singleTask
- 如果從A跳轉到B之後,我們點選了很多個A或者其他activity,一旦跳轉到B,B的上層棧空間全部被清除,B成為新棧頂
- 這時再點選跳轉到B自己,不會建立新的B,因為B已經在棧頂
使用場景:當使用的activity佔據的資源較大的時候,就使用singleTask模式
## 6、singleInstance啟動模式
singleInstance是單例模式,建立的這個activity獨佔一個任務棧,並且每次跳回到這個activity都是讓這個獨佔的任務棧放置在最前面,另一個任務棧在後面。如果呼叫非singleInstance的activity,那麼獨佔的那個任務棧就會被置後。
singleInstance只會例項化一次,每次呼叫僅僅是讓這個獨佔的任務棧提前。呼叫了其他的就會讓這個任務棧置後。
使用場景:這個系統中只有唯一例項,比如說Launcher。或者詞典類APP的取詞功能,因為我們在每個介面都可以使用取詞功能。
## 7、啟動模式總結