——你可以失望,但不能绝望。累的时候可以慢一点,千万不要后退,你还没有拼劲全力。怎么知道没有奇迹。
前言
——最近抽空又学了一个Jetpack组件 —— WorkManager,由于工作繁忙,要学的东西还有很多,任务重,时间紧。虽然只学到了点皮毛,但是还是要花点时间做个总结。因为人们常说:学而不思则罔,思而不学则殆。不思不学则网贷。所以要想致富,好的学习方法是必要的。也跟大家分享一下所学的知识。少走的点弯路。
一、简介
(1)是什么
—— WorkManager是Android Jetpack 中管理后台任务的组件。
—— 常见的使用场景:1.向后端服务发送日志或分析数据 2.定期将应用数据与服务器同步
(2)有什么用
—— 使用 WorkManager API 可以轻松地调度后台任务。可延迟运行(即不需要立即运行)并且在应用退出(进程未关闭)或应用重启时能够可靠运行的任务。
(3)有什么优点
- 1.兼容JobScheduler与BroadcastReceiver 和 AlarmManager
- 2.工作约束满足多种情况
- 3.可使用一次性或周期性执行的任务
- 4.监控和管理计划任务
- 5.提供API将任务链接起来
- 6.遵循低电耗模式等省电功能
二、基本使用
(1)添加依赖
implementation android.arch.work:work-runtime:1.0.1
(2)创建后台任务(自定义类 继承 Worker 并重写doWork())
public static class MyWorker extends Worker {
public MyWorker(@NonNull Context context, @NonNull WorkerParameters params) {
super(context, params);
}
@Override
public Result doWork() {
return Result.success();//返回成功
// return Result.failure();//返回失败
// return Result.retry();//重试
}
}
(3)创建请求
// 对于一次性 WorkRequest,请使用 OneTimeWorkRequest,对于周期性工作,请使用 PeriodicWorkRequest.
// 构建一次性请求
// OneTimeWorkRequest request = new OneTimeWorkRequest.Builder(MyWorker.class).build();
// 构建周期性请求
// PeriodicWorkRequest request = new PeriodicWorkRequest.Builder(MyWorker.class,1, TimeUnit.HOURS).build();
(4)执行请求(如果没有设置约束条件则会立即执行)
WorkManager.getInstance().enqueue(request);
(5)取消和停止工作
WorkManager.getInstance().cancelWorkById(request.getId());
总结:1.创建任务——2.配置请求——3.执行请求
三、进阶
(1)进阶1:构建约束条件:
Uri uri = Uri.parse("xxxxx");
Constraints constraints = new Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED) //指定需要在有网的情况下
.setRequiresBatteryNotLow(true)//指定电量在可接受范围内运行
.setRequiresStorageNotLow(true)//指定在存储量在可接受范围内运行
.addContentUriTrigger(uri,true)//当Uri发生变化的时候运行
.setRequiresDeviceIdle(true)//当设备处于空闲状态时运行
.setRequiresCharging(true)//当设备处于充电状态时运行
.build();
//在请求
OneTimeWorkRequest request = new OneTimeWorkRequest.Builder(MyWorker.class)
.setConstraints(constraints)//添加约束
.build();
//当满足约束条件后才会执行该任务
WorkManager.getInstance().enqueue(r