Android Jetpack之简介

  • 为何使用 Android Jetpack?
  • Jetpack分类
  • Architecture(架构组件)
  • 使用Jetpack
    • Databinding
    • Lifecycles+ViewModel+LiveData
      • Kotlin
      • Java
    • Navigation
    • Paging
    • Room
      • 配置编译器选项
    • WorkManager

Jetpack 是一个由多个库组成的套件(并不是一个单一的组件库)

为何使用 Android Jetpack?

  • 遵循最佳做法
    Android Jetpack组件采用最新的设计方法构建,具有向后兼容性,可以减少崩溃和内存泄漏
  • 消除样板代码
    Android Jetpack可以管理各种繁琐的活动(如后台任务、导航和生命周期管理),以便您可以专注于打造特色的应用。
  • 减少不一致
    这些库可以在各种Android版本和设备中以一致的方式运作,助您降低复杂性。

Jetpack分类


从上图我们可以看出,JetPack组件库主要分为四个部分,分别是架构(Architecture)、界面(UI)、行为(behavior)和基础(foundation)。每个组件都可以单独使用,也可以配合在一起使用。其中用的比较多的是DataBinding、LiveData、Paging、Room、ViewModel、Lifecycles,也是接下来文章重点讲解的对象。

  • 架构组件:提供易用框架,应用稳健、可测试、易维护。
    DataBinding、ViewModel、LiveData、Lifecycle……
  • 基础组件:提供兼容性、测试、安全、Kotlin 语言支持等。
    Android KTX、Test……
  • 行为组件:提供Android服务,通知、权限、分享等。
    Permissions、Notifications、CameraX……
  • 界面组件:提供页面、布局、动画等。
    Fragment、Emoji、Palette……


上图盗用网络图片,根据官网上的介绍,目前 Jetpack 一共有 85 个组件库,有些看着很熟悉,比如:viewPager、fragment、recyclerview 等等,但有些好像根本就没有见过,也没有用过。

Architecture(架构组件)

  • Data Binding(数据绑定): 数据绑定库是一种支持库,借助该库,可以使用声明式将布局中的界面组件绑定到应用中的数据源。

  • Lifecycles: 方便管理 Activity 和 Fragment 生命周期,帮助开发者书写更轻量、易于维护的代码。

  • LiveData:是一个可观察的数据持有者类。与常规observable不同,LiveData是有生命周期感知的。

  • Navigation:处理应用内导航所需的一切。

  • Paging:帮助开发者一次加载和显示小块数据。按需加载部分数据可减少网络带宽和系统资源的使用。

  • Room:Room持久性库在SQLite上提供了一个抽象层,帮助开发者更友好、流畅的访问SQLite数据库。

  • ViewModel:以生命周期感知的方式存储和管理与UI相关的数据。

  • WorkManager:即使应用程序退出或设备重新启动,也可以轻松地调度预期将要运行的可延迟异步任务。

使用Jetpack

所有 Jetpack 组件都可在 Google Maven 代码库中找到。

点击查看jetpack库最新版本

打开你的项目的 build.gradle 文件并添加 google() 代码库,如下所示

allprojects {repositories {google()jcenter()}
}

然后,您可以在APP目录下面的build.gradle添加 Jetpack 组件,如下所示:

Databinding

数据绑定库与 Android Gradle 插件捆绑在一起。您无需声明对此库的依赖项,但必须启用它。

如需启用数据绑定,请在模块的 build.gradle 文件中将 dataBinding 构建选项设置为 true,如下所示:

android {...buildFeatures {dataBinding true}
}

注意:即使模块不直接使用数据绑定,也必须为依赖于使用数据绑定的库的所有模块启用数据绑定。

Lifecycles+ViewModel+LiveData

lifecycle-extensions 中的 API 已弃用。您可以为特定 Lifecycle 工件添加所需的依赖项。

Kotlin
    dependencies {val lifecycle_version = "2.4.0-alpha02"val arch_version = "2.1.0"// ViewModelimplementation("androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version")// LiveDataimplementation("androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version")// Lifecycles only (without ViewModel or LiveData)implementation("androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version")// Saved state module for ViewModelimplementation("androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version")// Annotation processorkapt("androidx.lifecycle:lifecycle-compiler:$lifecycle_version")// alternately - if using Java8, use the following instead of lifecycle-compilerimplementation("androidx.lifecycle:lifecycle-common-java8:$lifecycle_version")// optional - helpers for implementing LifecycleOwner in a Serviceimplementation("androidx.lifecycle:lifecycle-service:$lifecycle_version")// optional - ProcessLifecycleOwner provides a lifecycle for the whole application processimplementation("androidx.lifecycle:lifecycle-process:$lifecycle_version")// optional - ReactiveStreams support for LiveDataimplementation("androidx.lifecycle:lifecycle-reactivestreams-ktx:$lifecycle_version")// optional - Test helpers for LiveDatatestImplementation("androidx.arch.core:core-testing:$arch_version")}
Java
    dependencies {val lifecycle_version = "2.4.0-alpha02"val arch_version = "2.1.0"// ViewModelimplementation("androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version")// LiveDataimplementation("androidx.lifecycle:lifecycle-livedata:$lifecycle_version")// Lifecycles only (without ViewModel or LiveData)implementation("androidx.lifecycle:lifecycle-runtime:$lifecycle_version")// Saved state module for ViewModelimplementation("androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version")// Annotation processorannotationProcessor("androidx.lifecycle:lifecycle-compiler:$lifecycle_version")// alternately - if using Java8, use the following instead of lifecycle-compilerimplementation("androidx.lifecycle:lifecycle-common-java8:$lifecycle_version")// optional - helpers for implementing LifecycleOwner in a Serviceimplementation("androidx.lifecycle:lifecycle-service:$lifecycle_version")// optional - ProcessLifecycleOwner provides a lifecycle for the whole application processimplementation("androidx.lifecycle:lifecycle-process:$lifecycle_version")// optional - ReactiveStreams support for LiveDataimplementation("androidx.lifecycle:lifecycle-reactivestreams:$lifecycle_version")// optional - Test helpers for LiveDatatestImplementation("androidx.arch.core:core-testing:$arch_version")}

Navigation

dependencies {val nav_version = "2.3.5"// Java language implementationimplementation("androidx.navigation:navigation-fragment:$nav_version")implementation("androidx.navigation:navigation-ui:$nav_version")// Kotlinimplementation("androidx.navigation:navigation-fragment-ktx:$nav_version")implementation("androidx.navigation:navigation-ui-ktx:$nav_version")// Feature module Supportimplementation("androidx.navigation:navigation-dynamic-features-fragment:$nav_version")// Testing NavigationandroidTestImplementation("androidx.navigation:navigation-testing:$nav_version")// Jetpack Compose Integrationimplementation("androidx.navigation:navigation-compose:2.4.0-alpha03")
}

Paging

dependencies {val paging_version = "3.0.0"implementation("androidx.paging:paging-runtime:$paging_version")// alternatively - without Android dependencies for teststestImplementation("androidx.paging:paging-common:$paging_version")// optional - RxJava2 supportimplementation("androidx.paging:paging-rxjava2:$paging_version")// optional - RxJava3 supportimplementation("androidx.paging:paging-rxjava3:$paging_version")// optional - Guava ListenableFuture supportimplementation("androidx.paging:paging-guava:$paging_version")// optional - Jetpack Compose integrationimplementation("androidx.paging:paging-compose:1.0.0-alpha11")
}

Room

dependencies {def room_version = "2.3.0"implementation("androidx.room:room-runtime:$room_version")annotationProcessor "androidx.room:room-compiler:$room_version"// To use Kotlin annotation processing tool (kapt)kapt("androidx.room:room-compiler:$room_version")// To use Kotlin Symbolic Processing (KSP)ksp("androidx.room:room-compiler:$room_version")// optional - Kotlin Extensions and Coroutines support for Roomimplementation("androidx.room:room-ktx:$room_version")// optional - RxJava2 support for Roomimplementation "androidx.room:room-rxjava2:$room_version"// optional - RxJava3 support for Roomimplementation "androidx.room:room-rxjava3:$room_version"// optional - Guava support for Room, including Optional and ListenableFutureimplementation "androidx.room:room-guava:$room_version"// optional - Test helperstestImplementation("androidx.room:room-testing:$room_version")
}
配置编译器选项

Room 具有以下注解处理器选项:

  • room.schemaLocation:配置并启用将数据库架构导出到给定目录中的 JSON 文件的功能。如需了解详情,请参阅 Room 迁移。
  • room.incremental:启用 Gradle 增量注解处理器。
  • room.expandProjection:配置 Room 以重写查询,使其顶部星形投影在展开后仅包含 DAO 方法返回类型中定义的列。

以下代码段举例说明了如何配置这些选项:

android {...defaultConfig {...javaCompileOptions {annotationProcessorOptions {arguments += mapOf("room.schemaLocation" to "$projectDir/schemas","room.incremental" to "true","room.expandProjection" to "true")}}}
}

WorkManager

dependencies {val work_version = "2.5.0"// (Java only)implementation("androidx.work:work-runtime:$work_version")// Kotlin + coroutinesimplementation("androidx.work:work-runtime-ktx:$work_version")// optional - RxJava2 supportimplementation("androidx.work:work-rxjava2:$work_version")// optional - GCMNetworkManager supportimplementation("androidx.work:work-gcm:$work_version")// optional - Test helpersandroidTestImplementation("androidx.work:work-testing:$work_version")// optional - Multiprocess supportimplementation "androidx.work:work-multiprocess:$work_version"
}

如需了解如何使用 Kotlin 扩展,请参阅 ktx 文档。

如需详细了解依赖项,请参阅添加构建依赖项。

Jetpack全家桶(一)之简介相关推荐

  1. 【React全家桶】react简介(一)

    react简介 创建项目creat-react-app 1.1 React特点 1.2 引入文件 1.3 JSX 1.3.1 为什么要用JSX 1.3.2 JSX语法规则 1.4 虚拟DOM 1.5 ...

  2. react classname多个_React全家桶简介

    当前前端开发已经进入以vue.react.webpack为代表的编程2.0时代.在1.0时代,代码是写给机器的:在2.0时代,代码是写给工具的,然后由工具处理后再转给机器. 一.React全家桶简介 ...

  3. 【大数据人工智能AI2.0】GPT-4 office 全家桶发布,打工人凛冬将至 :Microsoft 365 Copilot (副驾驶)简介

    GPT-4 发布,只是一个开始. GPT-4 office 全家桶发布,打工人凛冬将至 Microsoft 365 Copilot 简介 北京时间今天凌晨,微软又发布了基于 GPT-4 的办公软件全家 ...

  4. Java Spring全家桶详解——Spring简介

    今天新开一个专栏,专门讲解Spring全家桶的知识点,我会用通俗易懂的话讲解晦涩难懂的原理,并搭配代码演示,让大家快速入门 废话不多说,今天我们先学习Spring全家桶中的第一个框架:Spring 如 ...

  5. TensorFlow全家桶的落地开花 | 2019 Google开发者日

    作者 | 唐小引写于上海世博中心 出品 | GDD 合作伙伴 CSDN(ID:CSDNnews) Android 10 原生支持 5G,Flutter 1.9.Dart 2.5 正式发布 这是 Goo ...

  6. eos操作系统_EOS基础全家桶(十一)智能合约IDE-EOS_Studio

    简介 我们马上要进入智能合约的开发了,以太坊最初提供了智能合约的功能,并宣告区块链进入2.0时代,而EOS的智能合约更进一步,提供了更多的便利性和可能性.为了进一步了解智能合约,并进行开发,我们需要先 ...

  7. [转]vue全面介绍--全家桶、项目实例

    慢慢了解vue及其全家桶的过程 原文http://blog.csdn.net/zhenghao35791/article/details/67639415 简介 "简单却不失优雅,小巧而不乏 ...

  8. vue全家桶+koa2+mongoDB打造全栈社区博客

    背景 一直以来都想自己编写一个自己的社区博客,后来在网上找了一下,最后决定参考慕课网的一个社区项目,决定改用vue2.6+AntdForVue+koa2+mongoose实现一套社区博客. 简介 这是 ...

  9. 尚硅谷Vue技术全家桶(1)

    尚硅谷Vue技术全家桶 课程来源于b站尚硅谷教程:一套搞定Vue技术全家桶,轻松拿捏vue3.0(vue.js全网最新) 课程简介 在这个vue2到vue3的过渡时期,需要兼顾2.x和3版本.尚硅谷的 ...

最新文章

  1. python csv.reader参数指定
  2. 供应链金融服务平台:应收、预付和存货融资业务
  3. metamask中的import account的代码实现
  4. 海外 谷歌 app api_Google App Engine Java功能和命名空间API
  5. androidfiletransfer_mac手机助手(Android File Transfer)下载_mac手机助手(Android File Transfer)官方下载...
  6. Sublime 自定义格式化快捷键
  7. 面试题:HashMap和ConcurrentHashMap的区别,HashMap的底层源码。
  8. python with open as yaml_python – pyyaml并仅使用字符串引号
  9. python设置字符串的格式_Python中的字符串格式
  10. Win7 SP1语言包微软官方下载地址及使用方法
  11. mysql case循环_php一次操作多个数据是循环更新好还是使用mysql里带的casewhen?性能方面哪个更有优势?...
  12. python基础词云制作——中国地图
  13. html字体大小vw,如何使用CSS vw尺寸单位实现响应式字体
  14. unity实现对话控制
  15. 谷歌浏览器无法记住密码问题
  16. Unity 你以为SetParent()是个很简单的API???!!
  17. 利用动态气泡图进行数据分析
  18. Mathematica基础及应用
  19. IndentationError:expected an indented block错误解决
  20. 视野:产业链,价值链,核心竞争力

热门文章

  1. 关于“labuladong的算法小抄”的学习笔记---第0章核心框架汇总的前半部分框架(c++版)
  2. [MSSQL]汉字转拼音函数实现语句
  3. U报错The path to the driver executable must be set by the webdriver.chrome.driver system property; for
  4. log4j.properties例子
  5. UUID 全世界的唯一id!(唯一的接口标识符)
  6. 车载录像机创见DrivePro 200 DIY安装
  7. java mysql的一次报错,Public Key Retrieval is not allowed
  8. 【图神经网络】简化 GCN(SGC)
  9. 从SGC(Server Gated Cryptography)技术看SSL证书的加密作用
  10. 设置字体样式:字号大小,字体种类,字体粗细