Jetpack应用架构指南

0. 前言

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

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 有以下特点

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

1.Android Jetpack分类

Android Jetpack 分为四大块:Architecture、UI、Foundationy 以及 Behavior,随着时间的增加,Android 团队在 Jetpack 又增添了许多组件,目前最新的版图如下。

1-1. Architecture 架构组件

Jetppack 意在帮助我们开发者加快开发速度,能够让我们专注于自己的业务而不是花费大量时间去做一些兼容等琐碎的工作。

Architecture 架构组件模块有着良好的兼容性,并且架构组件里的每个组件能够帮助我们应对某一类难题/痛点

Lifecycle

能够帮我们轻松的应对 Activity/Fragment  的生命周期问题,能够让我们以一种更加解耦的方式处理生命周期的变化问题,以及轻松避免内存泄露

LiveData

在底层数据库更改时通知视图。基于观察者模式、并且感知生命周期的数据持有类,能够帮助我们更好地解耦与处理数据,与常规 observable 不同,LiveData 是有生命周期感知的

ViewModel

以生命周期的方式管理界面相关的数据,通常和 DataBinding 配合使用,为开发者实现 MVVM架构提供了强有力的支持。

 

Data Binding 以声明方式将可观察数据绑定到界面元素,通常和 ViewModel 配合使用

Room

友好、流畅的访问 SQLite 数据库。它在 SQLite 的基础上提供了一个抽象层,允许更强大的数据库访问

WorkManager

为我们执行后台任务提供了一站式解决方案

Navigation

能够帮助我们更加方便地构建单 Activity 应用,方便处理应用内导航

Paging

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

Android 在推出 架构组件 的同时,还推荐了一个适合 Android 应用的架构,各个组件组织起来,如下图

每个组件都关注自己的事情,互不干扰,让我们的应用更加解耦且职责清晰

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

1-2. Foundationy(基础组件)

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

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

1-3. Behavior(行为组件)

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

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

1-4.UI (界面组件)

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

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

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

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

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

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

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

    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-ktx 和 lifecycle-viewmodel-ktx 所示。KTX 扩展在基于 Java 的 API 基础上构建,充分利用了 Kotlin 特有的语言功能。

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

3. 小结

很显然了,架构组件对于我们来说具有非常大的实战价值,我们必须去了解并学会它们

App实战指南:https://github.com/googlesamples/android-sunflower

developers:https://developer.android.google.cn/jetpack/getting-started?hl=zh-cn

架构组件:https://developer.android.google.cn/topic/libraries/architecture?hl=zh-cn

猜你喜欢

转载自blog.csdn.net/PrisonJoker/article/details/113966093
今日推荐