WorkManager是什么
运行可推迟的后台工作。根据设备API情况,自动选择JobScheduler或AlarmManager来实现后台任务,在应用推出之后还可以继续执行。
Worker任务的执行者,抽象类,需要执行的具体任务,需要实现doWork执行在单独的后台线程里。
doWork的返回值:
- Worker.Result.SUCCESS 任务执行成功
- Worker.Result.FAILURE 任务执行失败
- Worker.Result.RETRY 任务需要重新执行,需要与WorkRequest.Builder中的setBackoffCirteria()一起使用
简单使用
引入WorkManager
dependencies {
implementation 'androidx.work:work-runtime:2.4.0'
}
自定义Worker
public class UploadWorker extends Worker {
private static final String TAG = "UploadWorker-";
public UploadWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
super(context, workerParams);
}
@NonNull
@Override
public Result doWork() {
// 子线程
Log.d(TAG, "doWork: " + (Looper.getMainLooper() == Looper.myLooper()));
return Result.success();
}
}
执行任务
public class WorkerActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_worker);
OneTimeWorkRequest request = new OneTimeWorkRequest.Builder(UploadWorker.class).build();
WorkManager.getInstance(getApplicationContext()).enqueue(request);
}
}
原理
WorkManager管理任务请求和任务队列,WorkRequest加入任务队列。通过WorkManager来调度任务,分散系统资源负载。