ViewModel 中的狀態
畫面或 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 Activity
、Fragment
,以及 Navigation graph destination 的 lifecycle。
如果想深入瞭解 UI 層架構,請參閱 UI layer 說明文件。
注意:
ViewModel
並非 Composition 的一部分。因此我們不應該在ViewModel
裡去持有 composables 內建立的狀態 (例如 remembered value),這樣做可能會導致 memory leaks。
此系列文章是以我的業餘專案: Kimoji 為範例
Kimoji 是一款心情日記 App,讓你用可愛的 emoji 來撰寫你的心情日記。現在就來試試這款設計精美的微日記吧!
📥 立馬下載 | | | 🎟️ 限免兌換碼