產生 UI 狀態 (Views)

概念和 Jetpack Compose 實作

基本上,狀態產生是逐步將變更套用至 UI 狀態的過程。狀態一直存在,而且會因事件而變更。下表匯總了事件與狀態之間的差異:

事件

狀態

短暫、無法預測,且存在於有限期間內。

一直存在。

狀態產生的輸入內容。

狀態產生的輸出內容。

UI 或其他來源的產物。

供 UI 取用。

事件可能來自:

  • 使用者:在使用者與應用程式的 UI 互動時。
  • 其他狀態變更來源:透過 UI 顯示應用程式資料的 API、網域,或是 Snackbar 逾時事件、用途或存放區等各資料層。

狀態產生 API

狀態產生有兩個主要 API 可用,視您目前處於哪個管道階段而定:

Pipeline Stage

API

輸入

您應使用非同步 API 來執行 UI 執行緒以外的工作,以免發生 UI 卡頓的情形。例如,Kotlin 中的 Coroutine 或 Flows,以及 Java 程式設計語言中的 RxJava 或回呼。

輸出

您應使用可觀測的資料容器 API,在狀態變更時撤銷及重新轉譯 UI。例如 StateFlow 或 LiveData。可觀測的資料容器可保證 UI 一律會在畫面上顯示 UI 狀態。

這兩種方法當中,與選擇用於輸出的可觀測 API 相較,選擇用於輸入的非同步 API 對狀態產生管道的性質影響更大。這是因為輸入內容決定了可套用至管道的處理類型

狀態產生管道組合

以下各節說明各種輸入內容最適用的狀態產生技術,以及相符的輸出 API。每個狀態產生管道都是輸入和輸出的組合,且應具有以下性質:

  • 生命週期感知:在 UI 不可見或無效的情況下,狀態產生管道不應耗用任何資源,除非有明確要求。
  • 易於取用:UI 應該能夠輕鬆轉譯產生的 UI 狀態。針對狀態產生管道輸出內容的注意事項,會因不同 View API (例如 View 系統或 Jetpack Compose) 而有所差異。

狀態產生管道的輸出類型

為 UI 狀態選擇輸出 API 以及其呈現性質,主要取決於應用程式用於轉譯 UI 的 API。在 Android 應用程式中,您可以選擇使用 Views 或 Jetpack Compose。需考量的事項包括:

下表匯總了使用 Views 框架時,狀態正式版群組管道應使用的 API:

輸入功率

輸出內容

一次性 API

StateFlowLiveData

串流 API

StateFlowLiveData

一次性 API 和串流 API

StateFlowLiveData