Android WorkManager

        WorkManager是适合用于持久性工作的推荐解决方案。
持久性的工作:如果工作始终要通过应用重启和系统重新启动来调度,便是持久性的工作。
由于大多数后台处理操作都是通过持久性工作完成的,因此 WorkManager 是适用于后台处理操作的主要推荐 API。

         WorkManager 是 Android Jetpack 支持库中的一部分,用于管理后台任务的执行。它旨在解决在现代Android设备上运行后台任务时面临的挑战,如应用进程可能被系统杀死、设备可能进入休眠状态、以及操作系统对后台服务的各种限制等。WorkManager 提供了一种简单而可靠的方法来确保即使在这些困难条件下,你的任务也能可靠地执行。

一、工作原理

        WorkManager 通过一系列策略和约束条件来安排和管理任务的执行。当你提交一个任务(称为 WorkRequest)给 WorkManager 时,它会根据你的定义选择合适的时机来执行这个任务。这包括考虑设备的电池寿命、系统资源以及其他应用的行为。

        WorkManager 内部使用了一个作业队列和一个调度器,它们负责决定何时运行任务。如果设备重新启动,WorkManager 能够保证延迟任务在重启后继续执行。

        WorkManager的工作原理基于三个核心概念:WorkRequest、WorkInfo和Worker。

        WorkRequest:表示要执行的工作,它包含了工作的详细信息,如要执行的任务、执行的约束条件等。WorkRequest可以是OneTimeWorkRequest(一次性任务)或PeriodicWorkRequest(周期性任务,周期性任务的时间间隔时间不能小于15分钟,源码设置最小15分钟,小于 15 分钟的定期任务已经被强制调整为 15 分钟执行,避免频繁的后台定时任务对前台应用的影响,规避了 API 的非法滥用:)。

        WorkInfo:表示工作的状态和结果,开发者可以通过查询WorkInfo来了解工作的执行情况。

        Worker:实际执行工作的对象,开发者需要创建自己的Worker来执行具体的任务,我们要执行的具体任务,需要继承Worker,重写doWork方法,然后在里面写具体的逻辑。

二、优点

1、WorkManager 能保证任务最终会被执行,即使应用退出或设备重启。

2、WorkManager最低能兼容API Level 14,几乎兼容100%Android设备。
WorkManager能依据设备的情况,选择不同的执行方案。在API Level 23+,通过JobScheduler来完成任务,而在API Level 23以下的设备中,通过AlarmManager和Broadcast Receivers组合完成任务。但无论采用哪种方案,任务最终都是交由Executor来完成。

3、支持一次性任务和周期性任务,以及任务间的依赖关系,可灵活配置任务执行的约束条件。

三、缺点

1、非即时任务,即延时执行,由于WorkManager的设计原则侧重于可靠性和电力效率,对于需要立即执行的任务,可能不如直接启动服务或线程来得即时。

2、受制于系统资源分配策略,不能保证任务会在特定时间内开始执行,尤其在网络或电量约束较严格时,即到了约定时间可能不会立即执行

3、不能实时监听任务进度或结果,只能监听任务状态变化。

四、使用

WorkManager使用enqueueUniquePeriodicWork执行周期性任务,其中ExistingPeriodicWorkPolicy参数的三个值分别对应不同的工作策略

KEEP:保持已存在的工作,忽略新工作。

REPLACE:取消并删除已存在的工作,添加新工作。

APPEND:将新工作添加为现有工作的延续。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值