【Android】安卓四大元件之Activity(三)
阿新 • • 發佈:2022-01-19
# 【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、啟動模式總結 |