WorkManager的使用

目录

1.引入依赖

2. 创建继承Worker类的自定义类

3. 创建WorkManager

4. 创建Constraints(约束)

5. 创建WorkRequest

(1) 用于执行一次性任务

 (2) 用于执行周期性任务

6. 执行请求

7. 取消任务


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

猜你喜欢

转载自blog.csdn.net/m0_57150356/article/details/135105121