在 Android 上使用 MVVM 和 Jetpack 程式庫進行重構

《多鄰國 (Duolingo)》是世界上最受歡迎的語言學習應用程式,因為這款應用程式能讓人過去覺得輕鬆有趣。這種流暢的語言體驗需要不斷推出新功能和實驗,以及執行流暢、執行以上所有功能的應用程式。多虧了多端裝置上的應用程式,《多鄰國 (Duolingo)》才會沒有回應,代表學習者可能會感到不快。因此他們致力展現卓越的應用程式體驗,特別是有 60% 學員 (包括執行長) 透過入門級手機追蹤應用程式的 Android 裝置。因此,當多鄰國的 Android 開發團隊發現「應用程式無回應」錯誤、影格遺失,甚至是收到手寫申訴,就會立即採取行動。

他們很快就發現了應用程式效能問題的根源:現有的軟體架構未能隨著團隊成長而調整規模。應用程式必須完成必要的更新,造成應用程式效能出現劇烈的迴歸問題。他們的開發人員花了更多時間修正錯誤,也減少推出可產生收益的全新功能。他們過舊的軟體架構,越來越難受到嚴峻的拖延,除了對他們的團隊速度造成影響,也最重要的是,讓使用者享有更佳的體驗。他們需要從頭開始重新建構程式碼集。

如何做到這點

早期,這個團隊便已互相干擾。請問這是他們目前的優先順序嗎?有位機構認為,持續推送新功能和提升收益比以往更為重要,另一名則是將重心全心放在 Android 重新啟動上。最終,他們達成共識,更加努力對抗迴歸,避免他們全面停用道路地圖。他們必須全力以赴

團隊決定採用越來越多熱門的解決方案,他們決定使用 Model-View-ViewModel 重新編寫應用程式,這是 Google 支援的軟體模式,可讓開發人員建立明確的關注點分離,藉此簡化應用程式的架構。使用 MVVM 時,他們可以將圖形使用者介面 (檢視畫面) 的開發與商業邏輯 (模型) 的開發分開。他們可以製定明確且議定的模式,讓自己能夠更輕鬆地協調新功能,並培訓新進開發人員。

將各項功能拆分為各自的模組化架構後,團隊就能迅速提升工作效率,因為團隊可以將每項功能指派給不同的群組,讓這些群組同時處理各項功能,進而加快作業速度並減少錯誤。

我們以 Android 的 Jetpack 程式庫實作這個新架構,包括 DaggerHilt,以協助開發人員編寫在各種 Android 版本和裝置中都能維持一致的程式碼。上述兩個新增項目可讓他們建立更封裝的功能,並更有效率地使用 Android 內建模組

成果

這些效能大幅提升了學員的 Android 使用體驗,尤其是在入門級裝置上。並推出更回應式的應用程式,以及旗艦裝置上的動畫更流暢。每日「應用程式無回應」或 ANR 發生率下降了 41%,應用程式低於目標影格速率的時間百分比下降 28%。最重要的是,當使用者捲動瀏覽主要畫面時,速度會提升 40%。

使用者留下筆記,讀取 ANR 次數減少 41%、影格速率提高 28%,運作速度加快 40%。


整個重新啟動花了八週,對所有《多鄰國》學員而言,這款應用程式的吸引力和愉悅的使用體驗。在此後的六個月內,該團隊至今沒有顯著的全新效能迴歸問題,幫助他們再次專心開發可產生收益的功能。他們將重心放在品質上的努力,獲得了回報。

多鄰國 (多鄰國) 付出的努力不懈,也因此成為全球最頂尖的語言學習應用程式。他們致力打造卓越的應用程式體驗,也就是在不犧牲無障礙功能的情況下,打造頂尖的教育體驗。

開始使用

如想深入瞭解 Duolingo 如何整合 Jetpack 的程式庫,以及 Model-View-ViewModel 如何改善應用程式,請參閱開發人員專用的技術個案研究