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、流水不腐小夏等实力悍将的经验分享

猜你喜欢

转载自www.cnblogs.com/cold-ice/p/9115780.html