Android框架式編程之Android Architecture Components

1. 當前Android開發面臨的問題

Android開發不一樣於傳統的桌面程序開發,桌面程序通常都有惟一的快捷方式入口,而且常做爲單進程存在;而一個典型的Android應用一般由多個應用組件構成,包括不一樣數量的Activity、Fragment、Service、Content Provider、Broadcast Receiver等。html

此外,用戶在移動設備上經常會在多個App之間切換。例如,若是用戶想要在一個社交應用上分享一張圖片,那麼通常的流程是首先該社交應用可能會使用Intent的方式經過Android系統來啓動一個拍照應用,此時用戶雖然離開了社交App,但其體驗是無縫銜接的。一樣地,拍照應用也可能啓動其餘應用,如文件選擇器或其餘。最終用戶返回社交應用而後分享圖片。固然,用戶操做可能在上述過程當中的任什麼時候刻被電話打斷,當通話結束再繼續進行圖片分享流程。android

在Android系統中相似的應用切換很是頻繁,所以須要使得咱們的應用可以正確處理上述流程。並且移動設備的資源是有限的,因此在任什麼時候候,操做系統都有可能殺死一些應用來爲一些新的應用騰出資源。編程

綜上,咱們的應用組件可能被無規則地啓動,也可能隨時被用戶或系統銷燬,其生命週期並不禁咱們控制,所以咱們不該該在應用組件中存儲任何數據並且組件之間也不該該互相依賴。這時候,咱們就須要從新考慮如何設計Android應用的架構了。網絡

2. Android 應用架構設計原則

在設計Android應用架構的時候,咱們須要考慮如下兩個設計原則:架構

第一,職責分離。咱們不該該把任何跟UI處理或系統交互無關的代碼寫到Activity或Fragment中,而是儘量保持Activity和Fragment的簡潔(職責單一化),這樣能夠避免許多生命週期相關的問題。由於咱們並不能控制這些類,因此咱們應該最小化對App組件的依賴從而提供穩定的用戶體驗。框架

第二,數據模型(Model)驅動UI,最好是可持久化的數據模型。持久化數據不只能夠保證當系統爲了釋放資源而銷燬掉App時用戶不會丟失數據,並且當網絡情況差或無網絡時App依然能夠工做。Model也能夠當作一種處理應用數據的組件,它們獨立於視圖和其餘App組件,所以Model不存在和生命週期相關的問題。ide

3. Android Architecture Componets

在介紹Android Architecture Components以前,先簡單的講一下Android常見架構的變遷:
  • 無架構模式 --> MVC:實現了邏輯與界面的分層開發,顯著提高了可測試性,實現了數據隔離&關注點隔離。
  • MVC --> MVP:面向接口編程,將邏輯從 UI 組件(Activity、Fragment)轉移到 P 層,進一步提高可測試性。

在MVP中,將邏輯轉移到P層,這樣更合理。由於UI 組件是鏈接用戶和OS的那一層,並不徹底屬於開發者自己,會受到系統的影響,好比配置的更改、內存不足重啓等等,因此儘可能保證 UI 組件整潔,纔會提高代碼的可測試性和穩健性。post

不管是 MVC MVP MVVM 它們存在什麼問題呢?測試

他們的模塊通訊方式,始終是持有對象(或接口)。對於 Android 系統來講,每個你在 Manifest 聲明的四大組件都有可能會忽然死掉,這也形成了:ui

  • 持有對象可能會有 NPE
  • 會有可能內存泄漏
  • 會寫不少生命週期相關的模板代碼

爲了掩蓋或解決以上種種問題,Android Architecture Components 架構就應運而生了,Android Architecture Components 架構包括了一系列組件,好比 LifeCycle、Room、LiveData、ViewModel、Paging 等等。

4. Android Jetpack

講到 Android Architecture Components 不得不提 Android Jetpack,Jetpack就是Android官方提供的一個組件集合,它能夠幫助咱們加快 Android 開發速度,消除模板代碼。這個集合能夠分爲四大類:

(1) 基礎組件:提供核心的系統功能、Kotlin擴展以及對Multidex和自動化測試的支持。

(2) 架構組件:幫助實現生命週期管理、數據持久化等工做。

(3) 行爲組件:幫助開發者構建穩定、易於測試和維護的應用程序。

(4) UI組件:幫助開發者構建的應用程序擁有更好的用戶體驗。

Jetpack是以「未捆綁」的庫形式提供的,這些類庫不屬於基礎Android平臺的一部分,所以咱們能夠根據本身的需求使用和更新每個組件,獨立於任何特定的Android版本提供功能,從而實現向後兼容。相關的組件庫包括:Lifecycle、LiveData、ViewModel、Room。

5. 推薦資料

1. Android Jetpack:https://developer.android.google.cn/jetpack/

2. Room:Android框架式編程之Room 

3. ViewModel:https://www.jianshu.com/p/0987bd15b235

4. Lifecycle:https://www.jianshu.com/p/52b87ed17be0

5. LiveData:https://www.jianshu.com/p/95726843eb29

6. Android Architecture Components:https://www.jianshu.com/p/87a0332e5dec

相關文章
相關標籤/搜索