Jetpack 高级程序开发组件
Jetpack 简介
Jetpack 是一个开发组件工具集,是一个由多个库组成的套件,它的主要目的是帮助我们编写出更加简洁的代码、并简化开发过程。
Jetpack 中的组件有一个特点,它们大部分不依赖于任何 Android 系统版本,这意味着这些组件通常是定义在 AndroidX 库当中的,并且拥有非常好的向下兼容性,代码可在各种Android版本和设备中一致运行。
早在2017年时,Google就推出了一系列架构组件,称为Architecture Components(架构 组件),并于2018年在Google I/O大会上提出Jetpack,且将Architecture Components纳入其中,时至今日,越来越多组件被纳入其中。
Jetpack 家族主要由基础、架构、行为、界面这 4 个部分组成。其中也不全是些新东西,像通知、权限、Fragment 都属于 Jetpack。
Jetpack 所有的库都发布在AndroidX下面
早期的 support-v4 和 appcompat-v7支持库已经不合时宜了,他们是Android早期为了解决新版API的向后兼容问题而发布的。
按照官方文档说明 AndroidX 是对 android.support.xxx 包的整理后产物。由于之前的 support 包过于混乱,所以,Google 推出了AndroidX,将所有API的包名都统一为androidx.* 的方式,AndroidX不仅提供与支持库同等的功能,而且还提供了新的库。(support 包在 28 之后便不再更新了,为了避免影响使用AndroidX,可以使compileSdkVersion的编译版本不低于API 28)
在 AS 3.5 之后,新建项目默认使用 Android X。这对应着gradle.properties文件里这两句话:
1 | # 表示当前项目启用 AndroidX |
AppCompatActivity 是 AndroidX 中提供的一种向下兼容的 Activity,可以使 Activity 在不同系统版本中的功能保持一致。AppCompatActivity 是 Activity 的子类。
WorkManager
WorkManager 很适合用于处理一些要求定时执行的任务,它可以根据操作系统的版本自动选择底层是使用 AlarmManager 实现还是 JobScheduler 实现,从而降低了我们的使用成本。另外,它还支持周期性任务、链式任务处理等功能,是一个非常强大的工具。
但 WorkManager 和 Service 并不相同,也没有直接联系。Service 是 Android 系统的四大组件之一,它在没有被销毁的情况下是一直保持在后台运行的。而 WorkManager 只是一个处理定时任务的工具,它可以保证即使在应用程序退出甚至手机重启的情况下,之前注册的任务依然将会得到执行,因此 WorkManager 很适合用于执行一些定期和服务器进行交互的任务,比如周期性地同步数据,等等。
另外,使用 WorkManager 注册的周期性任务不能保证一定会准时执行,这并不是 bug,而是系统为了减少电量消耗,可能会将触发时间临近的几个任务放在一起执行,这样可以大幅度低减少 CPU 被唤醒的次数,从而有效延长电池的使用时间。
WorkManager 的所有功能,在国产手机上都有可能得不到正确的运行。这是因为绝大多数的国产手机厂商在进行 Android 系统定制时会增加一个一键关闭的功能,允许用户一键杀死所有非白名单的应用程序。而被杀死的应用程序既无法接收广播,也无法运行 WorkManager 的后台任务。
所以,建议是 WorkManager 可以用,但是千万别依赖它去实现什么核心功能,因为它在国产手机上可能会非常不稳定。
基本用法
1 | // 添加依赖 |
基本用法主要分三步:
- 定义一个后台任务,并实现具体的任务逻辑。
- 配置该后台任务的运行条件和约束信息,并构建后台任务请求。
- 将该后台任务请求传入 WorkManager 的 enqueue() 中,系统会在合适的时间运行。
1 | /** |
1 | class MainActivity : AppCompatActivity() { |
处理复杂任务
1 | class MainActivity : AppCompatActivity() { |
备注
参考资料: