WorkManager是Jetpack架构组件中的,可以用来执行一些将来执行的任务。不适用于立即执行的任务,和退出时需要执行的任务。
(ps:感觉用处不大,一般需求都是立即执行的任务)
抱着学习的态度,我们来简单使用下:
导包
implementation "androidx.work:work-runtime:2.5.0"
Work
public class UploadWorker extends Worker {
public UploadWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
super(context, workerParams);
}
@NonNull
@Override
public Result doWork() {
// 这里执行任务
uploadLocation();
return Result.success();
}
private void uploadLocation() {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Log.i("work", "执行任务");
}
}
我们需要执行的任务需要继承 Worker 实现 doWork 方法,这里面就可以写需要执行的具体代码,最后返回成功就行。
任务约束
Constraints downloadConstraints = new Constraints.Builder()
.setRequiredNetworkType(NetworkType.UNMETERED)
.build();
构建任务约束的规则,比如什么网络下执行,低电量是否执行等。这个百度下,看下这个类里面有哪些方法,这里就不一一列举了。
WorkRequest
OneTimeWorkRequest // 一次性任务
PeriodicWorkRequest // 周期性任务
Constraints downloadConstraints = new Constraints.Builder()
.setRequiredNetworkType(NetworkType.UNMETERED)
.build();
// 创建一个一次性任务
WorkRequest uploadWorkRequest = new OneTimeWorkRequest.Builder(UploadWorker.class)
.setConstraints(downloadConstraints) // 添加任务约束
.build();
WorkManager
最后我们将创建的任务添加的执行队列中
WorkManager.getInstance(this).enqueue(uploadWorkRequest);
取消任务
WorkManager.getInstance(this).cancelAllWork(); // 取消全部任务
WorkManager.getInstance(this).cancelAllWorkByTag("tag"); // 这里取消设置tag的任务