Ответ: 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, сохранять в БД, и т.д.