В PeriodicWorkRequest.Builder есть addTag
метод, enqueueUniquePeriodicWork(TAG, policy, periodicWorkRequest)
также есть 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
, и OneTimeWorkRequest.Builder
включают метод [addTag()
6, который позволяет вам установить TAG
, который вы можете позже использовать для идентификации набора рабочих запросов для наблюдения или отменить их.
В случае enqueueUniquePeriodicWork(UniqueName, policy, workrequest)
первый параметр — это уникальное имя, используемое WorkManager для идентификации каждой уникальной работы, и оно не связано с TAG
, назначенным для WorkRequest.
Итак, чтобы отменить своего воркера, вы должны использовать набор TAG
в WorkRequest с помощью метода setTag
:
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");
Более подробная информация доступна в документации: