当前位置: 首页 > news >正文

AAC架构系列一(初识)

1.Android Architecture Components是什么?

Android体系结构组件是一组库,可帮助您设计健壮,可测试和可维护的应用程序。从用于管理UI组件生命周期和处理数据持久性的类开始。

  • DataBinding是一个支持库,允许您使用声明性格式而不是以编程方式将布局中的UI组件绑定到应用程序中的数据源。
  • 轻松管理应用程序的生命周期。新的生命周期感知组件可帮助您管理活动和碎片生命周期。生存配置更改,避免内存泄漏并轻松将数据加载到UI中。
  • 使用LiveData构建数据对象,以便在基础数据库更改时通知视图。
  • ViewModel存储在应用程序轮换中未销毁的UI相关数据。
  • Room是一个SQLite对象映射库。使用它来避免样板代码并轻松地将SQLite表数据转换为Java对象。Room提供SQLite语句的编译时检查,可以返回RxJava,Flowable和LiveData observable。
  • Navigation是指允许用户在应用内的不同内容中导航,导入和退出的交互。
  • Paging Library可帮助您一次加载和显示小块数据。按需加载部分数据可减少网络带宽和系统资源的使用。
  • WorkManager可以轻松安排即使应用程序退出或设备重新启动也可以运行的可延迟的异步任务。

Google I/O 大会上也对新的组件架构有一些介绍,详细可以看这个链接。

2.向项目添加组件

上面对这些组件进行了一些简单得介绍,接下来自然是要如何向我们的项目中引入这些组件了。这些都是Google官方推出的组件,当然首先需要在你的project的build.gradle中文件中引入google()啦,向下面这样就好:

allprojects {
    repositories {
        google()
        jcenter()
    }
}
复制代码

关于LifeCycles与ViewModel以及LiveData的引入,只需要根据自己的需求在下面进行选择就好:

dependencies {
    def lifecycle_version = "2.0.0"

    // ViewModel and LiveData
    implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version"
    // alternatively - just ViewModel
    implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version" // For Kotlin use lifecycle-viewmodel-ktx
    // alternatively - just LiveData
    implementation "androidx.lifecycle:lifecycle-livedata:$lifecycle_version"
    // alternatively - Lifecycles only (no ViewModel or LiveData). Some UI
    //     AndroidX libraries use this lightweight import for Lifecycle
    implementation "androidx.lifecycle:lifecycle-runtime:$lifecycle_version"

    annotationProcessor "androidx.lifecycle:lifecycle-compiler:$lifecycle_version" // For Kotlin use kapt instead of annotationProcessor
    // alternately - if using Java8, use the following instead of lifecycle-compiler
    implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"

    // optional - ReactiveStreams support for LiveData
    implementation "androidx.lifecycle:lifecycle-reactivestreams:$lifecycle_version" // For Kotlin use lifecycle-reactivestreams-ktx

    // optional - Test helpers for LiveData
    testImplementation "androidx.arch.core:core-testing:$lifecycle_version"
}
复制代码

dataBinding的使用需要在app的build.gradle中加入下面的配置:

android {
    ...
    dataBinding {
        enabled = true
    }
}
复制代码

Navigation需要的声明依赖:

dependencies {
    def nav_version = "2.1.0-alpha02"

    implementation "androidx.navigation:navigation-fragment:$nav_version" // For Kotlin use navigation-fragment-ktx
    implementation "androidx.navigation:navigation-ui:$nav_version" // For Kotlin use navigation-ui-ktx
}
复制代码

Paging需要的声明依赖:

dependencies {
    def paging_version = "2.1.0"

    implementation "androidx.paging:paging-runtime:$paging_version" // For Kotlin use paging-runtime-ktx

    // alternatively - without Android dependencies for testing
    testImplementation "androidx.paging:paging-common:$paging_version" // For Kotlin use paging-common-ktx

    // optional - RxJava support
    implementation "androidx.paging:paging-rxjava2:$paging_version" // For Kotlin use paging-rxjava2-ktx
}
复制代码

Room需要的声明依赖:

dependencies {
    def room_version = "2.1.0-alpha06"

    implementation "androidx.room:room-runtime:$room_version"
    annotationProcessor "androidx.room:room-compiler:$room_version" // For Kotlin use kapt instead of annotationProcessor

    // optional - Kotlin Extensions and Coroutines support for Room
    implementation "androidx.room:room-ktx:$room_version"

    // optional - RxJava support for Room
    implementation "androidx.room:room-rxjava2:$room_version"

    // optional - Guava support for Room, including Optional and ListenableFuture
    implementation "androidx.room:room-guava:$room_version"

    // Test helpers
    testImplementation "androidx.room:room-testing:$room_version"
}
复制代码

WorkManager需要的声明依赖:

 dependencies {
    def work_version = "2.0.1"

    // (Java only)
    implementation "androidx.work:work-runtime:$work_version"

    // Kotlin + coroutines
    implementation "androidx.work:work-runtime-ktx:$work_version"

    // optional - RxJava2 support
    implementation "androidx.work:work-rxjava2:$work_version"
    // optional - Test helpers
    androidTestImplementation "androidx.work:work-testing:$work_version"
  }
复制代码

3.本节总结

本节主要对本系列中会介绍到的组件进行了一些初步的了解,我也是在一边的学习一边的进行记录,Architecture Components是JetPack中的一部分,也是非常重要的一部分,Google这两年一直在对这一套的架构进行不断的更新,就是想要解决Android开发中的很多痛点,以后Architecture Components作为Android开发的基础架构也是必然的趋势,所以就让我们现在一起来学习它吧。

  • AAC架构系列一(初识)
  • AAC架构系列二(DataBinding)
  • AAC架构系列三(生命周期感知组件)

相关文章:

  • Jboot 2.0.7 发布,分布式事务新增对 HikariCP、C3P0 等连接池的支持
  • mybatis特殊字符转义
  • 软件测试2019:第三次作业
  • JavaEE (13种技术都是什么?)
  • 一个SQL无法kill掉的案例
  • Delphi中Move、CopyMemory操作
  • 零基础如何高效的学习java开发?
  • 基于 Django2 实现邮箱注册登录功能
  • klock 分布式锁重大更新
  • python 基础问题,包括语法等
  • Spark- SparkSQL中 Row.getLong 出现NullPointerException错误的处理方法
  • 原子性问题的解决思路--锁
  • Day1 BFS算法的学习和训练
  • 使用DataWorks来调度AnalyticDB任务
  • 好程序员分享ApacheSpark常见的三大误解
  • ➹使用webpack配置多页面应用(MPA)
  • canvas 高仿 Apple Watch 表盘
  • canvas绘制圆角头像
  • Javascript 原型链
  • leetcode讲解--894. All Possible Full Binary Trees
  • Node + FFmpeg 实现Canvas动画导出视频
  • oldjun 检测网站的经验
  • rabbitmq延迟消息示例
  • Solarized Scheme
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • 回顾2016
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 开源地图数据可视化库——mapnik
  • 马上搞懂 GeoJSON
  • 前言-如何学习区块链
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • #HarmonyOS:Web组件的使用
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (Git) gitignore基础使用
  • (NSDate) 时间 (time )比较
  • (翻译)terry crowley: 写给程序员
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (小白学Java)Java简介和基本配置
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • (转)memcache、redis缓存
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .Net Web窗口页属性
  • .NET 简介:跨平台、开源、高性能的开发平台
  • .Net程序猿乐Android发展---(10)框架布局FrameLayout
  • .net开发时的诡异问题,button的onclick事件无效
  • @四年级家长,这条香港优才计划+华侨生联考捷径,一定要看!
  • [1159]adb判断手机屏幕状态并点亮屏幕
  • [1181]linux两台服务器之间传输文件和文件夹
  • [20150321]索引空块的问题.txt
  • [APUE]进程关系(下)
  • [C#] 基于 yield 语句的迭代器逻辑懒执行