一、引言
WorkManager 是google提供的异步执行任务的管理框架,是 Android Jetpack 的一部分,会根据手机的API版本和应用程序的状态来选择适当的方式执行任务。
在后台执行任务的需求是非常常见的,Android也提供了多种解决方案,如JobScheduler、Loader、Service等,如果这些API没有被恰当使用,则可能会消耗大量电量。Android在解决应用程序耗电问题上做了各种尝试,从Doze到App Standby,通过各种方式限制和管理应用程序,以保证应用程序不会在后台消耗过多的设备电量。WorkManager为应用程序中那些不需要及时完成的任务提供了一个统一的解决方案,以便在设备电量和用户体验之间达到一个比较好的平衡
二、WorkManager特点
- 针对的是不需要及时完成的任务
例如,发送应用程序日志、同步应用程序数据、备份用户数据等,这些任务一般都不需要立即完成,如果我们自己来管理这些任务,逻辑可能会非常复杂,若API使用不恰当,可能会消耗大量电量。
- 保证任务一定会执行
WorkManager能保证任务一定会被执行,即使应用程序当前不在运行中,甚至在设备重启过后任务仍然会在适当的时刻被执行。WorkManager有自己的数据库,关于任务的所有信息和数据都保存在该数据库中。因此只要任务交给了WorkManager,哪怕应用程序彻底退出或者设备被重新启动,WorkManager依然能够保证完成任务。
- 兼容范围广
WorkManager最低能兼容API Level 14,并且不需要设备安装Google Play Services。因此,不用过于担心兼容性问题,因为API Level 14已经能够兼容几乎100%的设备了。
三、WorkManager兼容方案
WorkManager能根据设备的情况,选择不同的执行方案。在API Level 23以上的设备中通过JobScheduler完成任务,在API Level 23以下的设备中,通过AlarmManager和Broadcast Receivers组合来完成任务。但无论采用哪种方案,任务最终都是由Executor来执行的。另外,WorkManager不是一种新的工作线程,它的出现不是为了替代其他类型的工作线程。工作线程通常立即运行,并在任务执行完成后给用户反馈,而WorkManager不是即时的,它不能保证任务能立即得到执行。

四、WorkManager使用方法
1. 使用前的准备
导入依赖
将依赖项添加到应用的 build.gradle 文件中:
dependencies {
def work_version = "2.7.1"
implementation "androidx.work:work-runtime:$work_version"
}
创建Activity
新建一个Activity,在其布局文件中放置一个按钮,作为任务的触发器。
2. 定义任务
新建一个MyWork类继承Worker类,重写dowork()方法,在其中添加希望由WorkManager 运行的工作任务
import android.content.Context;
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.work.Worker;
import androidx.work.WorkerParameters;
public class MyWork extends Worker {
public

最低0.47元/天 解锁文章
2464

被折叠的 条评论
为什么被折叠?



