Android WorkManager получить все запросы - PullRequest
0 голосов
/ 29 февраля 2020

Я использую WorkManager вместо AlarmManager и хочу обновить запрос во время выполнения, поэтому мне нужно получить этот запрос. Как я могу это сделать?

OneTimeWorkRequest request = new OneTimeWorkRequest.Builder(TripWorker.class)
                           .setInputData(dataBuilder.build())
                           .setInitialDelay(milliseconds, TimeUnit.MILLISECONDS)
                           .addTag("Tag")
                           .build();

workManager.enqueue(request);

Ответы [ 2 ]

0 голосов
/ 29 февраля 2020

Вы не можете изменить существующий WorkRequest.

Вы можете использовать уникальную работу WorkManager и поставить в очередь измененный WorkRequest для замены существующего:

  1. Use enqueueUniqueWork вместо использования enqueue
  2. Когда вам нужно изменить WorkRequest, создайте новый и поставьте в очередь его с UniqueWorkRequest, используя то же уникальное имя, с REPLACE policy.

Имейте в виду, что ваш работник может работать, пока вы его заменяете. Вам нужно аккуратно обрабатывать остановки в Worker (остановки являются совместными, поэтому вам нужно добавить некоторый код, как описано в guide ), используя метод isStopped и реализуя onStopped() обратный вызов.

0 голосов
/ 29 февраля 2020

Вы можете использовать getWorkInfoByIdLiveData или getWorkInfoByTagLiveData. WorkManager добавляет неявный тег к каждому enqueue (), который является простым именем класса. Таким образом, вы можете сделать что-то вроде:

workManager.getWorkInfosByTagLiveData(TripWorker.class.getName())
...