目录
WorkManager被设计为在应用关闭或设备重启后能够继续执行后台任务。这是通过将任务调度信息存储在持久性存储中,以及使用系统JobScheduler(在 Android 6.0 及更高版本)或AlarmManager(在 Android 5.0 及更低版本)进行调度来实现的。
WorkManager能够让我们很容易调试一些将来执行的任务,即使应用退出或者设备重启(这就是厉害的地方)。我们知道JobScheduler也有相似的功能,但是官方建议使用WorkManager取代JobScheduler,因为WorkManager不仅融合了其它的一些API的功能,例如与Google Firebase相关的FirebaseJobDispatcher,与Google Clound Messing相关的GcmNetworkManager,而且WorkManager也会关注电量节省。
当然,并不是所有的任务都会被执行。如果任务需要在应用退出时终止,WorkManager不适用。如果任务需要立即执行,WorkManager也不适用。
1.引入依赖
在build.gradle(Module:app)中添加如下依赖。
implementation "androidx.work:work-runtime:2.7.0" // 使用最新版本
2. 创建继承Worker类的自定义类
doWork()方法中重写任务代码,返回Result.success()表示运行成功,返回Result.failure()表示重新运行。
public class MyWorker extends Worker {
public MyWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
super(context, workerParams);
}
public Result doWork() {
// worker执行内容
// 返回Result.success()表示运行成功
// 返回Result.failure()表示重新运行
return Result.success();
}
}
3. 创建WorkManager
//WorkManager
WorkManager workManager=WorkManager.getInstance(context);
4. 创建Constraints(约束)
Constraints(约束)用于设置约束条件,也可以不使用约束。
//约束(可不使用)
Constraints constraints=new Constraints.Builder()
.setRequiredNetworkType(NetworkType.UNMETERED)
.build();
5. 创建WorkRequest
约束Constraints可有可无。
(1) 用于执行一次性任务
OneTimeWorkRequset
// 请求
WorkRequest workRequest=new OneTimeWorkRequest.Builder(MyWorker.class)
//.setConstraints(constraints)//约束(可不添加)
.build();
(2) 用于执行周期性任务
PeriodicWorkRequest
// 请求
WorkRequest workRequest=new PeriodicWorkRequest.Builder(MyWorker.class,PeriodicWorkRequest.MIN_PERIODIC_INTERVAL_MILLIS,TimeUnit.MILLISECONDS)
//.setConstraints(constraints)//约束(可不添加)
.build();
6. 执行请求
// 执行
workManager.enqueue(workRequest);
7. 取消任务
// 取消
workManager.cancelAllWork();
workManager.cancelWorkById(workRequest.getId());
tag: worker,WorkManager,后台服务,后台,service,服务,JobService,JobIntentService,job,JobScheduler