ViewModel 中的狀態

Kimoji:以 Jetpack Compose 實作一款「心情日記」應用 [22]

John Lu
Sep 25, 2022

--

畫面或 UI state會包含畫面上要顯示的內容 (例如日記清單)。由於這個狀態含有應用程式資料,因此通常連結著 app 架構的其他層

此系列文章是以我的業餘專案: Kimoji 為範例。
這款以純 Jetpack Compose 撰寫的 side project,已經在 Google Play 上架。 歡迎試玩!
📥 立馬下載 | | | 🎟️ 限免兌換碼

UI state可以描述畫面上要顯示的內容,而應用程式邏輯可以描述應用程式的行為,以及如何回應狀態變更。我們撰寫的邏輯有兩種類型: UI 邏輯(或稱 UI 行為),以及事務邏輯。

  • UI 邏輯和「如何顯示」畫面上的狀態變更有關 (例如 navigation 邏輯或顯示 Snackbar )。
  • 事務邏輯則是「如何處理」狀態變更 (例如付款或儲存使用者的設定)。這些邏輯通常位於 domain 或 data layer,不會在 UI layer。

ViewModel 會提供 UI 狀態,並能存取應用程式其他層的事務邏輯。另外 ViewModel 也能在 configuration changes 後繼續保留,所以生命週期比 Composition 要長。ViewModel 可以 follow ActivityFragment,以及 Navigation graph destination 的 lifecycle。

如果想深入瞭解 UI 層架構,請參閱 UI layer 說明文件

注意:ViewModel 並非 Composition 的一部分。因此我們不應該在 ViewModel 裡去持有 composables 內建立的狀態 (例如 remembered value),這樣做可能會導致 memory leaks。

此系列文章是以我的業餘專案: Kimoji 為範例

Kimoji 是一款心情日記 App,讓你用可愛的 emoji 來撰寫你的心情日記。現在就來試試這款設計精美的微日記吧!
📥 立馬下載 | | | 🎟️ 限免兌換碼

--

--

John Lu
John Lu

Written by John Lu

AI Engineer. Deeply motivated by challenges and tends to be excited by breaking conventional ways of thinking and doing. He builds fun and creative apps.

No responses yet