Android Architecture Components 系列(一)初識


引言
 設計App架構的基本原則
     Soc 原則 ,Separation of concerns 分離關注點原則 。簡單來說就是模塊化,低耦合。從Android 角度來說就是不要將任何有關UI操作以及調用系統組件的無關方法放到View層的Activity 或是Fragment類中。具體原因大家都知道的,系統內存不足,資源緊張時候會隨時主動kill掉view層的一些資源,如果這時候別的類還持有該類的引用,會造成內存泄露等問題。
    Model驅動Ui ,用持久化的數據的Model(保存到本地的數據)。
優點:    
    a、數據是持久化存儲的,所以當系統因為各種原因回收資源時候,並不會造成數據的丟失。
    b、在網絡異常狀態下依然能有效訪問數據。
 
Architecture Components 
定義
    Google IO 2017年 發布的Android Architecture Components 一套新的構架組件,在MVVM框架基礎上簡單的使用了Room、liveData,ViewModel框架組件,使得App架構更加健壯。
     A new collection of libraries that help you design robust, testable,and maintainable apps.
    這是一個幫助構建穩定,易於測試和易於維護的App架構的新庫
 
架構圖:
集成
導入Kotlin
implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version"// use -ktx for Kotlin
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version
 
  •     官方提供方法:--需要VPN
在根目錄gradle中添加相關依賴:
  allprojects { 
     repositories { 
         jcenter() 
         maven { url' https://maven.google.com'}//添加此行 
     }
}
  • 非官方提供方法:
    1、在項目的build.gradle中添加依賴:
      allprojects { 
     repositories { 
         jcenter() 
         maven { url‘https://dl.google.com/dl/android/maven2'}//添加此行 
     }
}
    2、在app/build.gradle中添加依賴:
        //dependencies for Architecutre Components
    def lifecycle_version = “1.1.1"
 
//For Lifecycles
    implementation "android.arch.lifecycle:extensions:$lifecycle_version"
    implementation "android.arch.lifecycle:$lifecycle_version"
    
 //lifecycles only  (no Viewmodel or liveData)
 //For ViewModel-alternatively
    implementation "android.arch.lifecycle:viewmodel1: $lifecycle_version"
   
 //For LiveData -alternatively
    implementation "android.arch.lifecycle:livedata: $lifecycle_version"
 //support library depend on this lightweight import
//annotationProcessor "android.arch.lifecycle:common-java8:$livecycle_version"
    implementation "android.arch.lifecycle:runtime: $lifecycle_version"
   
//optional Test helpers for liveData
    testImplementation "android.arch.cor:core-testing:$lifecycle_version"
    
//For Room
    def room_version ="1.1.0"
    implementation "android.arch.persistence.room:runtime:$room_version"
    annotationProcessor "android.arch.persistence.room:compiler:$room_version"
 
// For testing Room migrations, add:
//    testImplementation "android.arch.persistence.room:testing:$room_version"
// For Room RxJava support, add:
    implementation "android.arch.persistence.room:rxjava2:$room_version"
 
配置DataBinding依賴:
android {
    …
    dataBinding{
             enabled = true 
        }
    }
配置Room schemaLocation依賴:
    android {
    …
    defaultConfig{
         //指定room.schemaLocation生成的文件路徑
    javaCompileOptions{
        annotationProcessorOptions{
            arguments = [ “room.schemaLocation”: "$projectDir/schemas”.toString() ]
                }
            }    
        }
    }
組成
  • LifeCycle 
    生命周期管理,把原先Android生命周期中的代碼抽取出來,比如將原先需要在OnStart()等生命周期方法中執行的代碼分離出來到Activity 或是Fragment之外。
 
  • LiveData
    一個數據持有類,持有數據並且這個數據可以被觀察被監聽着,它需要和上面的LifeCycle綁定,在生命周期內使用才有效,減少內存泄露和引用問題。
 
  • ViewModel
    用於實現架構中的ViewModel,同時也是與LifeCycle綁定的,使用者無需擔心生命周期。可以在多個Fragment之間共享數據。 ex:旋轉屏幕后Activity重新create,這時候viewModel持有之前的數據不需要再次重新進行網絡讀取。
 
  • Room
    google推出的一個SQLite ORM庫,極大簡化數據庫的操作,類似於Retrofit風格。
 

如圖,Architecture Components主要提供了Lifecycle、LiveData、ViewModel、Room等以上這些功能。
 
架構圖
  • Activity/Fragment
     UI層,繪制用戶交互界面,監聽ViewModel,當ViewModel數據更新時刷新UI,監聽用戶事件反饋到ViewModel。
    
  • ViewModel
    持有或保存數據,向Repository中獲取數據,響應UI層的事件,執行響應的操作,響應數據變化並通知到UI層。
 
  • Repository
    App的完全的數據模型,ViewModel交互的對象,提供簡單的數據修改和獲取的接口,配合網絡層數據的更新與本地持久化數據的更新同步問題。
 
  • Data Source
    包含本地SQLite數據庫,網絡APi等。
 
   
 
本系列參考合集資料鏈接:
再次感謝作者:sunjenry 、H029982384、流水不腐小夏等實力悍將的經驗分享


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM