В случае уникальной работы, которая находится в рабочем состоянии, я хотел бы сохранить ее вместо запуска другой уникальной работы.
Я думал, что ExistingWorkPolicy.KEEP
выполнит это для меня, но кажется, что если уже есть уникальная работа, которая находится в рабочем состоянии и не ожидает, она начнет другую работу с этим уникальным тегом.
Из документов ExistingWorkPolicy.KEEP
:
Если существует ожидающая (незавершенная) работа с тем же уникальным
имя, ничего не делать.
Мы понимаем, что он продолжит работу, только если они находятся в состоянии ожидания, но не в рабочем состоянии.
Я использую последнюю доступную версию AndroidX WorkManager
, выпущенную совсем недавно:
https://developer.android.com/jetpack/androidx/releases/work#2.1.0-rc01
Edit:
Я отправил вопрос в команду Google, вы можете узнать здесь:
https://issuetracker.google.com/issues/137210601
Edit2: пример планирования уникальной работы:
val workRequest = OneTimeWorkRequest.Builder(TestWorker::class.java).build()
WorkManager.getInstance(this).enqueueUniqueWork("my_worker", ExistingWorkPolicy.KEEP, workRequest)
РЕДАКТИРОВАТЬ 3:
После еще нескольких тестов кажется, что я ошибся, заявив, что другой работник запускается, пока работает предыдущий. Ошибка возникла из-за того, что предыдущий работник вошел в состояние ENQUEUED
после того, как было RUNNING
, потому что он был прерван и затем снова работал с самого начала.
Подводя итог, ExistingWorkPolicy.KEEP
работает так, как задумано, и обеспечивает выполнение только одной уникальной работы.