Ответ: WorkManager
— это API для выполнения фоновых задач, которые:
- Сохраняются в БД (Room), и перезапускаются системой
- должны быть выполнены гарантированно, даже если: приложение закрыто, процесс убит, устройство перезагружено
- Могут быть отложены, запущены по условиям (Wi-Fi, зарядка и т.п.)
- Могут быть повторяющимися (periodic)
Когда использовать WorkManager
?
Сценарий | Использовать WorkManager? |
---|---|
Синхронизация данных в фоновом режиме | Да |
Отправка логов / статистики ночью | Да |
Загрузка медиафайлов только по Wi-Fi | Да |
One-time задача при следующем запуске | Да |
Точное выполнение в конкретное время | Лучше AlarmManager |
Реальное время (медиа, шагомер и т.п.) | ForegroundService |
Как работает под капотом?
WorkManager
использует:JobScheduler
(на API 23+)AlarmManager
+BroadcastReceiver
(на более старых)FirebaseJobDispatcher
(опционально в старых версиях)
- Все задания сохраняются в БД (обычно Room), чтобы пережить:
- перезапуск приложения
- перезагрузку устройства
- завершение процесса
- В
doWork()
нельзя использовать UI, но можно запускать API, сохранять в БД, и т.д.