У меня есть сценарий, в котором я хочу повторить недавно неудачные задания, но workmanager возвращает все неудачные задания. Есть ли способ удалить старые рабочие места?
Для OneTimeWorkRequest, ОТКАЗ - это окончательный статус. Это не собирается быть повторно выполненным. Для PeriodicWorkRequest это другое. Проверьте эти блоги:
OneTimeWorkRequest
PeriodicWorkRequest
Также это видео охватывает это.
Вернуться к вашему вопросу:
Есть ли способ удалить старые задания?
Да!
Используйте WorkManager#pruneWork(), чтобы удалить задания в конечном состоянии (УСПЕШНО, НЕ УКАЗАНО и ОТМЕНЕНО). Как видно из документов, этот метод следует использовать с осторожностью.
WorkManager#pruneWork()
Имейте в виду, что при этом удаляются все задания, находящиеся в состоянии сбоя. Способ удалить старые задания - это сократить время, в течение которого WorkRequests хранятся в базе данных WorkManager, устанавливая пользовательское значение срока хранения при их создании. Для этого используйте WorkRequest#keepResultsForAtLeast(long duration, TimeUnit timeUnit)
WorkRequest#keepResultsForAtLeast(long duration, TimeUnit timeUnit)
Определенно есть способ отменить работы с WorkManager.
WorkManager
Чтобы отменить работы с WorkManager, вам просто нужно сохранить UUID работ.
И вы сможете отменить любую работу по этому коду -
WorkManager.getInstance(context).cancelWorkById(UUID);