Android Jetpack组件库(第三部分)---WorkManager

Android Jetpack 是 Google 推出的一整套帮助 Android 应用程序开发的库、工具包和架构指南,旨在为 Android 应用程序提供更快,更轻松,更稳定的开发体验。自推出以来已经发展成了一个庞大的技术生态系统,包括了许多使用方便、功能强大的库,以下是其中一些新特性、新组件:

  1. Paging: 分页库增加了对后端和前端数据的分页处理;

  2. Room: 数据库库 Room 的升级增加了对数据库的全面支持和更好的一致性;

  3. WorkManager: 工作管理库 WorkManager 更加智能和可靠,支持更复杂的后台任务,并可与后台服务和 Job 统一管理器进行交互;

  4. Navigation: 导航库 Navigation 可以更轻松地设置和管理应用程序中的导航功能;

  5. CameraX: 相机库 CameraX 简化了相机应用程序的开发;

  6. Hilt: 依赖注入库 Hilt 简化了依赖注入和管理;

  7. Compose: UI工具包 Compose 提供了更加现代化、灵活和响应式的UI构建方式,可以大大简化UI构建的工作量;

  8. AppStartup: App Startup 库提供了对应用程序启动操作的检视和日志记录工具,可以更有效地优化启动时间;

  9. Security: 安全库 Security 提供了应用程序安全管理和保护数据的方案。

第三章 WorkManager库

  1. 原理:WorkManager 是基于 Android Architecture Components 设计的,遵循单一职责,并篡改开发者更易设置、管理任务、以及优化和适配设备能耗策略。WorkManager 引入 JobScheduler、Firebase JobDispatcher 和 AlarmManager 等基于后台任务和调度框架,以及 Room Database 来实现任务的管理和执行,并提供了方便开发者管理延时、定期或一次性任务的 API。

  2. 使用场景:WorkManager 对需要后台任务的应用程序非常有用,比如需要在后台执行网络请求、加密或执行长时间运算等任务。WorkManager 的适用场景通常涉及需要发起和处理异步操作的情形,如上传数据、后台同步、处理机器学习任务等。WorkManager 可以是您的首选方案,能够代替一些极其复杂的操作,如 Foreground Service 和较复杂的 JobScheduler 配置等,从而提高开发效率和性能。

  3. 实际开发案例:

(1)同步下载任务:在应用程序休眠期间批量下载数据或文件

(2)数据备份:在用户访问应用程序期间自动备份数据,并在需要进行后台同步时自动恢复

(3)即时消息:处理或接收即时消息并运行在后台中,从而可以在应用程序休眠时调用

(4)网络请求:在长时间操作完成后向服务器发送请求,并在操作完成后生成本地通知

(5)数据密集型任务:在å后台处理需要大量 CPU、内存或磁盘的分钟级或小时级任务

总之,WorkManager 提供了简单易用的 API,同时又不牺牲性能和精度,是一种非常方便的后台任务处理框架。它的出现使得开发者可以轻松处理异步任务,并与其他类库和平台(例如 Retrofit,RxJava 等)集成,同时遵循 Android 架构组件的设计原则和最佳实践。

下面我举个例子,介绍一下 WorkManager 在实际开发中的使用。

我们假设场景为:一个应用需要每隔一定时间向服务器发起数据同步请求,在发起请求前需要考虑网络可用性、电池电量是否充足等情况。

首先,你需要添加 WorkManager 依赖项:

implementation "androidx.work:work-runtime-ktx:2.7.0"

接下来,创建一个 Worker,他负责发起服务端同步请求:

class SyncWorker(appContext: Context, workerParams: WorkerParameters) :
    CoroutineWorker(appContext, workerParams) {

    override suspend fun doWork(): Result {
        if (!NetworkUtils.isNetworkAvailable(applicationContext)) {
            return Result.retry()
        }
        if (!BatteryUtils.isBatteryNotLow(applicationContext)) {
            return Result.retry()
        }

        // 发起同步请求
        val result = syncWithServer()

        return if (result.isSuccessful) {
            Result.success()
        } else {
            Result.retry()
        }
    }

    private fun syncWithServer(): Response<*> {
        // 向服务端发起请求并返回结果
        ...
    }

}

代码解释:

Worker 在其 doWork() 方法中执行实际同步请求,并返回一个 Result 对象,表示任务完成或需要重试。在此实现中,我们先检查网络和电池电量状态,然后发起同步请求。

接着,我们创建 WorkRequest:

val syncWorkRequest = PeriodicWorkRequest.Builder(
    SyncWorker::class.java,
    repeatInterval,
    repeatIntervalTimeUnit,
    flexTimeInterval,
    flexTimeIntervalTimeUnit
).addTag(TAG_SYNC_WORKER).build()

代码解释:

创建一个 PeriodicWorkRequest,它表示一个定期执行的任务。我们通过 Worker 类指定要执行的任务。除此之外,还设置了循环时间间隔和弹性间隔(即在约循环间隔时间内触发任务执行的允许范围),以及唯一标识任务的标签,以便在需要时取消或观察任务状态。

最后,我们启动这个任务:

WorkManager.getInstance(applicationContext).enqueue(syncWorkRequest)

代码解释:

通过 WorkManager 的 getInstance() 方法获取实例,并通过 enqueue() 方法启动任务。

至此,我们完成了一个简单的 WorkManager 和 Worker 的实现。这个例子演示了 WorkManager 在后台任务中的应用,它可以让开发者专注于逻辑和业务,将异步任务处理逻辑封装在 Worker 中,同时 WorkManager 来负责任务启动和管理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凉亭下

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值