前言

Android 已经发展十多年了,可以说是比较成熟的技术了,一开始时框架很少,也没有什么规范,所有的代码都是要自己写,比如网络请求,数据库操作,数据解析等等。后来出现了一些框架来帮助开发者快速进行开发,比如XUtils、Volley、OKHttp、EventBus等,随着框架越来越多,一个应用可以有多种技术选型,直接导致应用开发越来越不规范,导致做出来的应用质量参差不齐,这显然不是谷歌想看到的。谷歌随后推出了 MVP 和 MVVM相关的官方例子,效果很一般,而且覆盖面只是在架构上,Goole I/O 2018大会上推出的 Android Jetpack 有望解决以上的问题。

1 Android Jetpack 简介

Jetpack并不是一个框架或者组件,它是一套库、工具和指南的集合,可以帮助开发者更轻松地编写和构建出色的 Android 应用程序。这些组件可帮助开发者遵循最佳做法、摆脱编写样板代码的工作并简化复杂任务,以便将精力集中放在所需的代码上。

Android Jetpack中的有些组件并不是第一次推出,其中 LifeCycle、LiveData、ViewModel、Room 等组件早在 Google I/O 2017年大会上就随着 Android Architecture Component(AAC)一起推出了,在Goole I/O 2018大会上,用 AndroidX 替代了 Android Support Library,并在 Android Architecture Component 的基础上发布了Android Jetpack,AndroidX 也是属于 Android Jetpack。

Jetpack 有以下特点

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

2 Android Jetpack 分类

Jetpack 的分类如下如所示:

谷歌仍旧不断的完善 Android Jetpack,截至到2019年8月已经有很多新加的组件并没有显示在上图中,比如CameraX 等。Android Jetpack分类有4种,分别是 Architecture、Foundationy、Behavior、UI,下面分别介绍下。

2.1 Architecture(架构组件)

Architecture 指的是架构组件,帮助开发者设计稳健、可测试且易维护的应用。架构组件可以说是对应用开发帮助最大的组件,本系列也是围绕着架构组件进行讲解。

  1. DataBinding:以声明方式将可观察数据绑定到界面元素,通常和 ViewModel 配合使用。
  2. Lifecycle:方便管理 Activity 和 Fragment 的生命周期,可帮助开发者生成更易于维护的轻量级代码。
  3. LiveData:在底层数据库更改时通知视图。它是一个可观察的数据持有者,与常规 observable 不同,LiveData 是有生命周期感知的。
  4. Navigation:方便处理应用内导航。
  5. Paging:可以帮助开发者一次加载和显示小块数据,按需加载部分数据可减少网络带宽和系统资源的使用。
  6. Room:友好、流畅的访问 SQLite 数据库。它在 SQLite 的基础上提供了一个抽象层,允许更强大的数据库访问。
  7. ViewModel:以生命周期的方式管理界面相关的数据,通常和 DataBinding 配合使用,为开发者实现 MVVM架构提供了强有力的支持。
  8. WorkManager:管理 Android 的后台的作业,即使应用程序退出或设备重新启动也可以运行可延迟的异步任务。

这些架构组件既可以配合使用,也可以单独使用,这里建议还是尽量按照官方推荐的来。

官方推荐的 Android 应用架构如下图所示。

请注意,每个组件仅依赖于其下一级的组件。例如,Activity 和 Fragment 仅依赖于视图模型。存储区是唯一依赖于其他多个类的类;在本例中,存储区依赖于持久性数据模型和远程后端数据源。

这种设计打造了一致且愉快的用户体验。无论用户上次使用应用是在几分钟前还是几天之前,现在回到应用时都会立即看到应用在本地保留的用户信息。如果此数据已过时,则应用的存储区模块将开始在后台更新数据。

2.2 Foundationy(基础组件)

基础组件提供横向功能,例如向后兼容性、测试、安全、Kotlin 语言支持,它包含如下组件库:

  1. Android KTX:是一组 Kotlin 扩展程序,优化了供 Kotlin 使用的 Jetpack 和 Android 平台 API。帮助开发者以更简洁、更愉悦、更惯用的方式使用Kotlin进行 Android 开发。
  2. AppCompat:提供了一系列以 AppCompat 开头的 API,以便兼容低版本的 Android 开发。
  3. Auto:有助于开发 Android Auto 应用的组件,提供了适用于所有车辆的标准化界面和用户交互,开发者无需担心特定于车辆的硬件差异(如屏幕分辨率、软件界面、旋钮和触摸式控件)。
  4. Benchmark(检测):从 Android Studio 中快速对基于 Kotlin 或 Java 的代码进行基准化分析。衡量代码性能,并将基准化分析结果输出到 Android Studio 控制台。
  5. Multidex(多Dex处理):为方法数超过 64K 的应用启用多 dex 文件。
  6. Security(安全):按照安全最佳做法读写加密文件和共享偏好设置。
  7. Test(测试):用于单元和运行时界面测试的 Android 测试框架。
  8. TV:构建可让用户在大屏幕上体验沉浸式内容的应用。
  9. Wear OS:有助于开发 Wear 应用的组件。

2.3 Behavior(行为组件)

行为组件可帮助开发者的应用与标准Android服务(如通知、权限、分享)相集成。

  1. CameraX:帮助开发者简化相机应用的开发工作。它提供一致且易于使用的 API 界面,适用于大多数 Android 设备,并可向后兼容至 Android 5.0(API 级别 21)。
  2. DownloadManager(下载管理器):可处理长时间运行的HTTP下载,并在出现故障或在连接更改和系统重新启动后重试下载。
  3. Media & playback(媒体&播放):用于媒体播放和路由(包括 Google Cast)的向后兼容 API。
  4. Notifications(通知):提供向后兼容的通知 API,支持 Wear 和 Auto。
  5. Permissions(权限):用于检查和请求应用权限的兼容性 API。
  6. Preferences(偏好设置):提供了用户能够改变应用的功能和行为能力。
  7. Sharing(共享):提供适合应用操作栏的共享操作。
  8. Slices(切片):切片是一种UI模板,创建可在应用外部显示应用数据的灵活界面元素。

2.4 UI(界面组件)

界面组件可提供各类View和辅助程序,让应用不仅简单易用,还能带来愉悦体验。它包含如下组件库:

  1. Animation & Transitions(动画&过度):该框架包含用于常见效果的内置动画,并允许开发者创建自定义动画和生命周期回调。
  2. Emoji(表情符号):使用户在未更新系统版本的情况下也可以获取最新的表情符号。
  3. Fragment:组件化界面的基本单位。
  4. Layout(布局):xml书写的界面布局或者使用Compose完成的界面。
  5. Palette(调色板):从调色板中提取出有用的信息。

3. 在应用中引入Jetpack相关组件

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

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

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

然后,您可以添加 Jetpack 组件(例如 LiveData 和 ViewModel 等架构组件),如下所示:

dependencies {def lifecycle_version = "2.2.0"implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"...
}

许多 Jetpack 库都提供 Android KTX 扩展,如上面的 lifecycle-livedata-ktxlifecycle-viewmodel-ktx 所示。KTX 扩展在基于 Java 的 API 基础上构建,充分利用了 Kotlin 特有的语言功能。

基于 Kotlin 以及基于 Java 的 API 参考文档页面适用于所有 Jetpack 库。

总结

这篇文章内部不多,旨在让大家了解Android Jetpack是什么,包括什么,如何引用,从下一篇开始,就开始学习Android Jetpack的架构组件。

扫描下方二维码关注公众号,获取更多技术干货。

Jetpack架构组件 (一)-- Android Jetpack 简介相关推荐

  1. Android Jetpack架构组件之 Room(使用、源码篇)

    2019独角兽企业重金招聘Python工程师标准>>> 1.前言 最近简单看了下google推出的框架Jetpack,感觉此框架的内容可以对平时的开发有很大的帮助,也可以解决很多开发 ...

  2. android 使用4大组件的源码,Android Jetpack架构组件之 Paging(使用、源码篇)

    1.前言 最近简单看了下google推出的框架Jetpack,感觉此框架的内容可以对平时的开发有很大的帮助,也可以解决很多开发中的问题,对代码的逻辑和UI界面实现深层解耦,打造数据驱动型UI界面. A ...

  3. ios navigation的返回按钮长按_Android Jetpack架构组件 — Navigation入坑详解 [转]

    前言 这是最近看见的觉得比较有意思的文,希望对大家的学习有帮助. Navigation 直接翻译即为导航,它是 Android Jetpack 组件之一,让单 Activity 应用成为首选架构.应用 ...

  4. Android Jetpack架构组件(一)带你了解Android Jetpack

    本文首发于微信公众号「后厂村码农」 前言 Android已经发展了11年,可以说是比较成熟的技术了,一开始时框架很少,也没有什么规范,所有的代码都是要自己写,比如网络请求,数据库请求,数据解析等等.后 ...

  5. Android Jetpack架构组件之Navigation

    Navigation 导航是指支持用户导航.进入和退出应用中不同内容片段的交互.Android Jetpack 的导航组件可帮助您实现导航,无论是简单的按钮点击,还是应用栏和抽屉式导航栏等更为复杂的模 ...

  6. Retrofit+kotlin Coroutines(协程)+mvvm(Jetpack架构组件)实现更简洁的网络请求

    前言 使用kotlin协程也有一段时间了,给我最大的感受就是完全可以替代Rxjava了,并且写起来更加的简洁. 6月份Retrofit发布的2.6.0版本内部支持了kotlin协程中的挂起(suspe ...

  7. android置组件下面,Android Jetpack架构组件(十二)之Hilt

    一. 依赖注入简介 依赖注入(英文Dependency Injection,简写DI)是一种被广泛使用的编程技术,主要的作用代码解耦. 借助依赖注入,我们可以轻松的管理类之间的依赖,并最终建立高可维护 ...

  8. Android Jetpack 架构组件之 Room

    一.Room简介 Room 持久性库在 SQLite 的基础上提供了一个抽象层,让用户能够在充分利用 SQLite 的强大功能的同时,获享更强健的数据库访问机制.该库可帮助您在运行应用的设备上创建应用 ...

  9. Jetpack 架构组件:Room 数据库应用

    简介 Room 是一个 ORM (Object Relational Mapping)对象关系映射数据库.其底层还是封装的 SQLite 的能力.它赋予了一个强大的功能,就是可以用面向对象的思维来和数 ...

最新文章

  1. oracle修改c root,从新发现Oracle太美之root.sh
  2. CentOS 6.7 配置 yum 安装 nginx
  3. Windows 7 Ubuntu 14.04完美双系统安装及系统引导配置
  4. JS 无法清除Cookie的解决方法
  5. Android MediaPlayer使用方法简单介绍
  6. CCF NOI1015 星期几
  7. 一些非常简单的Python代码
  8. 液压系统原理动画_3大类12种液压阀工作原理,直观动画演示一看就懂
  9. 【机器学习】实验一 实验报告
  10. 工作日志,常见的统计解决方案
  11. eclipse IED 创建springboot项目教程
  12. Spring Boot事务
  13. C++ QT中国象棋项目讲解(六) 人机对战N步搜索
  14. oracle oats 工具讲解,Oracle 表空间基本操作
  15. python 网页爬虫抓取 自动化测试之phantomjs使用详解
  16. 今天一不小心,把抖爸爸给爬了
  17. docker安装speedtest
  18. 电子商务安全欺诈预防市场现状研究分析-
  19. 计算机和网络的不同,为什么网吧的计算机和网络如此流畅,与家庭网络有什么区别?...
  20. QQ好友列表导出用JTree树实现

热门文章

  1. GitHub克隆下载加速
  2. 基于matlab的相干信号的doa 估计,基于空间平滑MUSIC算法的相干信号DOA估计(1)
  3. C语言:搬砖问题(for循环)
  4. oracle物理读优化,oracle 性能优化 06_sql优化
  5. java po vo bo是什么以及_JAVA中(PO,VO,TO,BO,DAO,POJO)分别是指什么
  6. 全志A40i及全志T3开发板 对CAN的支持补充
  7. 毕达哥拉斯的面包规矩
  8. Android上层与驱动交互完整篇(一)I2C设备驱动篇
  9. java代码--------随机输出100个随机数,要求每行10个数
  10. 股票历史数据-股票历史数据查询怎么查?怎么查股票历史数据?