Будет ли периодическая работа WorkManager раз в 15 минут работать при закрытом приложении
Что проверяют
Знаете ли вы, чем «закрыл приложение» отличается от «остановил принудительно» и что WorkManager обещает, а что нет. Следом обычно спрашивают, как быть, если задача должна выполняться точно по времени.
Как отвечать
Короткий ответ: будет, но не строго раз в 15 минут.
- почему работает без процесса:
WorkManagerсохраняет задачи в своей базе и планирует их черезJobScheduler. Живой процесс не нужен, система сама поднимет его, когда придёт время. После перезагрузки устройства задачи восстанавливаются; - 15 минут это минимум:
PeriodicWorkRequestне принимает интервал меньшеMIN_PERIODIC_INTERVAL_MILLIS, более короткий поднимается до 15 минут с предупреждением в логе. Гарантия одна: не чаще раза за интервал, момент запуска внутри окна выбирает система. Окно сужают параметромflexInterval; - что откладывает запуск: Doze переносит работу в окна обслуживания, App Standby Buckets режут частоту для давно не открытых приложений, режим энергосбережения тоже ограничивает фон. Плюс ваши
Constraints: нет сети или низкий заряд, значит, задача подождёт; - когда не сработает совсем: после принудительной остановки в настройках система снимает все задачи приложения до следующего ручного запуска. На части прошивок (Xiaomi, Huawei и другие) смахивание из недавних работает так же.
Регистрируют такую работу через enqueueUniquePeriodicWork с политикой KEEP или UPDATE, иначе каждый старт приложения добавит дубликат. Если нужна точность до минуты, WorkManager не подходит: смотрят в сторону точных будильников AlarmManager (с Android 12 для них нужно отдельное разрешение) или серверного пуша через FCM.
Где спотыкаются
Отвечают «да, ровно каждые 15 минут». Периодическая работа не бывает точной, так задумано.
Не различают смахивание из недавних и force stop, хотя суть вопроса именно в этом.
Вызывают enqueue для периодической работы в onCreate без уникального имени и через неделю получают десятки одинаковых задач.