zoukankan      html  css  js  c++  java
  • 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、流水不腐小夏等实力悍将的经验分享
  • 相关阅读:
    npm 全局执行 update 、 outdated 出现 npm-debug.log 404 错误的问题
    python 爬虫爬取内容时, xa0 、 u3000 的含义
    SCNU ACM 2016新生赛决赛 解题报告
    SCNU ACM 2016新生赛初赛 解题报告
    【记录】Ubuntu下安装VirtualBox
    Ubuntu16.04 LTS下apt安装WireShark
    Java的初始化块、静态初始化块、构造函数的执行顺序及用途探究
    Ubuntu在wps-office等qt5程序下不能切换中文fcitx输入法的问题
    Ubuntu管理开机启动服务项 -- 图形界面的Boot-up Manager
    解决Ubuntu下Firefox+OpenJDK没有Java插件的问题
  • 原文地址:https://www.cnblogs.com/cold-ice/p/9115780.html
Copyright © 2011-2022 走看看