---
# System prepended metadata

title: '[Video Note] [Android] Philipp Lackner - Tasks, Back Stack & Launch Modes '
tags: [Android, Video Note]

---

### 影片介紹
- 影片將介紹 Android 系統中的 Tasks 和 Back Stack 基礎概念
- 將會深入探討 Activity 的啟動模式 (Launch Modes)

### Back Stack
![CleanShot 2024-09-30 at 01.16.01](https://hackmd.io/_uploads/r1TUjWPAC.png)
![CleanShot 2024-09-30 at 01.16.11](https://hackmd.io/_uploads/SkPvjZw0C.png)
![CleanShot 2024-09-30 at 01.16.17](https://hackmd.io/_uploads/H1nvoZP0A.png)

- Back Stack 是一組已經打開的 Activity 堆疊，表示目前活動畫面和其歷史
- 每個應用程式都有一個 Back Stack，記錄用戶的畫面導航順序
- 例如瀏覽器應用程式：用戶從主頁畫面進入書籤畫面，書籤畫面將被推送至 Back Stack
- 用戶點擊返回鍵時，當前畫面將從 Back Stack 中移除，返回上一個畫面
- Back Stack 表示畫面堆疊，最後進入的畫面會在堆疊的頂端

### Task
![CleanShot 2024-09-30 at 01.17.01](https://hackmd.io/_uploads/HJjcibP0A.png)
![CleanShot 2024-09-30 at 01.17.23](https://hackmd.io/_uploads/Bky3jWDCR.png)
![CleanShot 2024-09-30 at 01.17.34](https://hackmd.io/_uploads/H1uhoZPAR.png)

- Task 是由多個相互關聯的 Activity 組成的一個單位
- 每個 Task 代表一組相關的 Activity，通常來自同一個應用程式
- 不同的應用程式可以有不同的 Task，Android 會記住用戶之前打開過的 Task
- 例如，用戶從瀏覽器跳轉至 Instagram，這會形成一個新 Task
- 當用戶在 Instagram 返回時，會回到之前的瀏覽器 Task

### Launch Modes (啟動模式)
#### 1. **Standard (預設模式)**
![CleanShot 2024-09-30 at 01.17.38](https://hackmd.io/_uploads/SkXToWvCA.png)
![CleanShot 2024-09-30 at 01.17.52](https://hackmd.io/_uploads/B136jZDRC.png)

- 每次打開新 Activity 都會創建一個新實例並推送到 Back Stack
- 例如，從 Instagram 點擊連結打開 Chrome，會在 Back Stack 中新增一個新的 Chrome Activity
#### 2. **Single Top (單一頂層模式)**
![CleanShot 2024-09-30 at 01.18.03](https://hackmd.io/_uploads/Sk00oWDCA.png)
![CleanShot 2024-09-30 at 01.18.42](https://hackmd.io/_uploads/By1b2bPAC.png)

- 如果要打開的 Activity 已經位於 Back Stack 頂端，則不會創建新實例
- 適合避免重複導航至同一畫面
#### 3. **Single Task (單一任務模式)**
![CleanShot 2024-09-30 at 01.19.41](https://hackmd.io/_uploads/BJ_VhZDR0.png)
![CleanShot 2024-09-30 at 01.19.52](https://hackmd.io/_uploads/H1mH3WwRA.png)

- 確保新 Activity 在一個獨立的 Task 中啟動，而不是覆蓋現有的 Task
- 例如，用戶從 Instagram 點擊連結打開瀏覽器，返回時應回到 Instagram，而不是瀏覽器內的其他頁面
#### 4. **Single Instance (單一實例模式)**
![CleanShot 2024-09-30 at 01.20.17](https://hackmd.io/_uploads/S1RU2WDAA.png)
![CleanShot 2024-09-30 at 01.20.23](https://hackmd.io/_uploads/ByGP2-vA0.png)

- 與 Single Task 類似，但此模式下的 Task 無法再打開其他 Activity
- 適用於像支付應用程式這類需隔離操作的應用場景

# Terminology
- 任務（Task）：表示一組活動（Activity），構成一個完整的用戶交互流程。
- 返回堆疊（Back Stack）：由活動組成的堆疊，按照後進先出的方式管理屏幕顯示。
- 活動（Activity）：Android應用中的單一屏幕，用來與用戶進行交互。
- 標準啟動模式（Standard Launch Mode）：默認啟動模式，每次啟動新活動時會創建一個新的實例並放入返回堆疊。
- 單一頂部（Single Top）：如果目標活動已在堆疊頂部，則不會創建新實例，而是重用已有實例。
- 單一任務（Single Task）：每次啟動活動時，在單獨的任務中執行，避免返回已存在的任務堆疊。
- 單一實例（Single Instance）：與單一任務相似，但該任務只能運行一個活動，且無法啟動其他活動。
- 螢幕轉換（Screen Transition）：應用中不同活動或片段之間的切換過程。
- 回退操作（Back Navigation）：用戶按下返回按鈕後，返回上一個活動或片段。
- 堆疊彈出（Pop Stack）：當用戶返回上一頁時，從返回堆疊中移除當前活動。
- Intent：Android中的消息傳遞機制，用來啟動活動或服務。
- 深層連結（Deep Link）：允許用戶通過URL直接導航到應用中的特定頁面。
- 隱式Intent（Implicit Intent）：不指定具體活動，Android系統根據可處理該Intent的活動進行選擇。
- 顯式Intent（Explicit Intent）：明確指定要啟動的活動或服務。
- 前景活動（Foreground Activity）：目前正在與用戶交互的活動，位於返回堆疊頂部。
- 背景活動（Background Activity）：未在前景顯示的活動，位於返回堆疊中。
- 片段（Fragment）：活動中的子組件，代表一個界面或行為模塊。
- 任務親和力（Task Affinity）：定義活動與任務的關聯性，影響活動被放置在哪個任務中。
- 視圖層級（View Hierarchy）：Android應用中視圖組件的結構，從父視圖到子視圖的層次結構。
- 配置更改（Configuration Change）：如屏幕旋轉、語言變更等導致活動重新創建的情況。