xiuyuantech 博客: https://xiuyuantech.github.io/

Jetpack 包含一系列 Android 库,它们都采用最佳做法并在 Android 应用中提供向后兼容性。 Jetpack 库可以单独使用,也可以组合使用,以满足应用的不同需求。 例如: WorkManager - 满足您的后台调度需求。 Room - 实现数据存储持久性。 Navigation - 管理应用导航流程。 CameraX - 满足相机应用需求。
实现方式 所有 Jetpack 组件都可在 Google Maven 代码库中找到。 在应用中使用 Jetpack 库:打开 settings.gradle 文件,将 google() 代码库添加到 dependencyResolutionManagement { repositories {…}} 块中,如下所示:
dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { google() jcenter() } }
如需详细了解如何使用 Jetpack,请查看以下页面:

从零到一搭建 我的 Demo 采用 MVVM 的设计模式,框架图如下:

Jetpack 组件:
Navigation:一个用于管理 Fragment 切换的工具类,可视化、可绑定控件、支持动画等是其优点。 Data Binding:不用说,都知道,加速 MVVM 的创建。 Lifecycle:虽然我没有写文章介绍,但是不代表它的作用不够强大,他是我们能够处理 Activity 和 Fragment 的生命周期的重要原因,在 AndroidX 的 Fragment 和 Activity 已经对 Lifecycle 提供了默认支持。
ViewModel:当做 MVVM 的 ViewModel 层,并具有声明周期意识的处理和 UI 相关的数据。 LiveData:同 RxJava 的作用一样,对数据进行监听,优点就是无需处理生命周期、无内存泄漏等。 Room:强大的 ORM 数据库框架。 Paging:易于使用的数据分页库,支持 RecyclerView。 WorkManager:灵活、简单、延迟和保证执行的后台任务处理库
使用踩坑
LiveData 优点:对数据进行监听,拥有可观察、生命周期感知、、无内存泄漏等的特点。 缺点:
只能在主线程中订阅和移除观察者 数据丢失问题,在数据生产速度 > 数据消费速度时,LiveData 无法观察者能够接收到全部数据。比如在子线程大量 postValue 数据但主线程消费跟不上时,中间就会有一部分数据被忽略。 在 Fragment 中出现 LiveData 同样数据多次回调的问题,针对这个问题,Google 一位大神在 Stack Overflow 实现了一个复写类 SingleLiveEvent. observeForever 和 removeObserver 方法要配套使用,否则会导致内存泄漏问题 LiveData 天生就是粘性的,当我们重复订阅的时候,会返回最后一次结果. UnPeek-LiveData 开源库可以解决这个问题。 LiveData 的替代者: RxJava: RxJava 是第三方组织 ReactiveX 开发的组件,Rx 是一个包括 Java、Go 等语言在内的多语言数据流框架。功能强大是它的优势,支持大量丰富的操作符,也支持线程切换和背压。然而 Rx 的学习门槛过高,对开发反而是一种新的负担,也会带来误用的风险。 Kotlin Flow: Kotlin Flow 是基于 Kotlin 协程基础能力搭建的一套数据流框架,从功能复杂性上看是介于 LiveData 和 RxJava 之间的解决方案。Kotlin Flow 拥有比 LiveData 更丰富的能力,但裁剪了 RxJava 大量复杂的操作符,做得更加精简。并且在 Kotlin 协程的加持下,Kotlin Flow 目前是 Google 主推的数据流框架。
Room 数据库加密不友好,推荐使用 saferoom 开源库适配 数据库版本升级迁移不友好,仅支持增删列字段,增删索引必须删除表重新创建; 新增字段必须添加默认值,建议项目创建时就添加默认值,索引一个字段单独使用普通索引,不建议使用联合索引即 Index(字段 1,字段 2);
Paging 仅适合加载查看数据的场景,不适合增删改的场景且无增删改方法。一旦增删改之后,Paging 分页逻辑将失去作用。 界面不可见后一段时间切回来时会重新加载数据。 解决方法: 1) 对 PagingFlow 添加 cacheIn(viewModelScope)。 2) 不使用 CoroutineLiveData,直接用 lifecycleScope.launchWhenCreated 和 flow 来接收 PagingData 数据。
WorkManager 适配 android12,版本必须在 2.7.1 之上 定时任务不一定准时执行,但一定会执行
总结 1.Android Jetpack 组件中的很多库都对其他库提供了支持,比如 Room 和 Paging 就对 LiveData 提供了支持。 2.向后兼容:基本上每个组件都对低版本提供了支持。支持 RxJava:由于 RxJava 强大的生态环境,几乎和数据相关的组件都对 RxJava 提供了支持。 3.减少代码量:以 Data Binding + ViewModel + LiveData 或 RxJava 构建的 MVVM 模式能够显著减少代码量,比较平时使用的 MVP 模式也会更加方便,无需主动更新 UI。 4.无需捆绑:Android Jetpack 系列组件可以无需捆绑使用,你如果只想用里面的单个库,那么就可以仅仅依赖一个库。
业务咨询:https://soloist.pages.dev
