setOverrideDeadline
, согласно его документации , заставляет вашу работу запускать , даже если другие ваши ограничения не выполняются . WorkManager этого не делает: он всегда соблюдает ваши ограничения.
Вы, конечно, можете ставить второй рабочий запрос в очередь, используя setInitialDelay
на желаемое время в качестве «крайнего срока переопределения». не включая другие ваши ограничения и включающий указанный c тег.
Это означает, что у вас будет два работника очереди:
- Реальный работник с ограничениями и тегом скажем,
"real_work"
- Рабочий переопределения крайнего срока, без ограничений, первоначальной задержки и тега, скажем
"override"
Если реальный работник сработает, вы можете позвонить workManager.cancelAllWorkByTag("override")
для отмены вашего работника крайнего срока отмены и продолжения работы в обычном режиме.
Если ваш работник крайнего срока отмены срабатывает, это означает, что не было никакого времени между тем, когда вы ставили в очередь своих работников, и крайним сроком отмены. Здесь вы хотели бы выяснить свою альтернативную стратегию (например, поставить в очередь нового работника с меньшими ограничениями и т. Д. c.). Это также место, где вы хотите workManager.cancelAllWorkByTag("real_work")
, если хотите, чтобы ваша реальная работа была отменена.