Экран, вход в аккаунт и восстановление сети ставят одну синхронизацию в WorkManager. Если каждый раз вызывать enqueue(), в очереди могут оказаться несколько одинаковых работ.
Дайте операции устойчивое имя. Для одноразовой синхронизации можно выбрать enqueueUniqueWork с KEEP: пока работа с этим именем не завершена, новая не добавляется. Пример вызова с заранее созданным OneTimeWorkRequest:
workManager.enqueueUniqueWork(
"sync:$accountId",
ExistingWorkPolicy.KEEP,
request
)
REPLACE решает другую задачу: отменяет текущую работу и заменяет её. Выбирайте политику по смыслу операции. Имя с accountId разделяет аккаунты; случайный UUID в имени убрал бы дедупликацию.
Важная граница: уникальная работа не гарантирует единственный HTTP-запрос за всё время. Если сервер выполнил изменение, а клиент не получил подтверждение, повтор может повторить эффект. Для таких операций нужен отдельный контракт идемпотентности на сервере.
#Android #WorkManager #Практика
