「宣告式」程式框架

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

John Lu
Sep 5, 2022

Jetpack Compose 是 Android 的新型宣告式 UI 套件。Compose 提供「宣告式 API」,透過較少的程式碼、強大的工具和直觀的 Kotlin API,讓我們輕鬆撰寫及維護 app UI。不過在我們開始用 Compose 寫 app 之前,有些術語我們需要說明一下,這些概念對 app 設計相當重要。

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

「宣告式」程式框架

過去,Android view 的層級能夠以 UI 元件的樹狀結構表示。由於 app 的狀態會依使用者互動等因素而改變,因此 UI 狀態必須被更新以顯示最新的資料。最常見的 UI 更新方式是使用 findViewById() 等函式來搜尋樹狀結構,以及呼叫 button.setText(String)container.addChild(View)img.setImageBitmap(Bitmap) 等方法來變更 node elements。這些方法會變更 UI 元件的內部狀態。

手動操作 view 還蠻容易出錯的。如果有一份資料給多個 view 去 render,我們很容易會忘記去更新其中一個 view 的資料。如果更新 view 時意外發生 conflict,也很容易造成狀態錯誤。舉例來說,某個 event listener 更新時可能會嘗試 set value 給一個剛從畫面中被移除的 UI 元件。一般來說,軟體維護複雜程度會隨著須更新的 view 數量而增加。

過去幾年來,整個產業紛紛開始改用宣告式 UI 模型,大幅簡化了建構和更新 UI 的工程問題。這項技術會從概念上重新產生整個螢幕畫面,然後只套用必要的變更。這種做法可降低手動更新 view 狀態的複雜性。而 Compose 正是一種宣告式 UI 架構。

重新產生整個螢幕畫面的一大挑戰,就是它在時間、運算量和電池用量的成本可能相當高昂。為減少這類成本,Compose 會聰明地在任一指定時間選擇需要重畫的 UI 部分。這對 UI 元件的設計方式有一些潛在影響,例如我們幾天後要詳細探討的 Recomposition。

此系列文章是以我的業餘專案: 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.