使用哪个 TAG 来取消作业

Which TAG to use to cancel the job

PeriodicWorkRequest.Builder有addTag方法,enqueueUniquePeriodicWork(TAG, policy, periodicWorkRequest)也有TAG。

问题是要使用哪个 TAG 才能取消所有 MyWorker 任务?会是 MyWorkerTag 还是 MySchedulerClassTag

PeriodicWorkRequest.Builder builder = new PeriodicWorkRequest.Builder(
                MyWorker.class, 
                PeriodicWorkRequest.MIN_PERIODIC_INTERVAL_MILLIS, 
                TimeUnit.MILLISECONDS);
        builder.addTag("MyWorkerTag");
        WorkManager.getInstance().enqueueUniquePeriodicWork("MySchedulerClassTag", ExistingPeriodicWorkPolicy.KEEP, builder.build());

两个 PeriodicWorkRequest.Builder and OneTimeWorkRequest.Builder include a [addTag()6 method that allows you to set a TAG that you can later use to identify a set of work request to observe or cancel 他们。

enqueueUniquePeriodicWork(UniqueName, policy, workrequest) 的情况下,第一个参数是 WorkManager 用来识别每个唯一工作的唯一名称,它与分配给 WorkRequest 的 TAG 无关。

因此,要取消您的工作人员,您应该使用 setTag 方法在 WorkRequest 上设置 TAG

PeriodicWorkRequest.Builder builder = new PeriodicWorkRequest.Builder(
            MyWorker.class, 
            PeriodicWorkRequest.MIN_PERIODIC_INTERVAL_MILLIS, 
            TimeUnit.MILLISECONDS)
    .addTag("MyWorkerTag")
    .build();

WorkManager.getInstance(context).enqueueUniquePeriodicWork(
            "UniqueName", 
            ExistingPeriodicWorkPolicy.KEEP, 
            builder);

// Later on, when needed
WorkManager.getInstance(context).cancelAllWorkByTag("MyWorkerTag");

文档中提供了更多信息: