WorkManager — это API из Android Jetpack для отложенного выполнения фоновых задач, которые:
- ```Worker``` — класс с бизнес-логикой задачи
- ```WorkRequest``` — запрос на выполнение (разовый или периодический)
- ```WorkManager``` — менеджер очереди задач
- ```WorkInfo``` — информация о состоянии задачи
Отложенные задачи
Например: отправка логов, синхронизация данных через 15 минут после события.
Периодические задачи
val periodicWork = PeriodicWorkRequestBuilder<SyncWorker>(1, TimeUnit.HOURS)
.setConstraints(constraints)
.build()
WorkManager.getInstance(context).enqueue(periodicWork)
Зависимые задачи
Последовательность: A → B → C или параллельное выполнение группы задач.
Критичные к условиям задачи
Например: загрузка контента только при наличии Wi-Fi и зарядке устройства.
Надежные задачи
Даже если приложение будет закрыто или устройство перезагружено.
val constraints = Constraints.Builder()
.setRequiredNetworkType(NetworkType.UNMETERED)
.setRequiresCharging(true)
.setRequiresBatteryNotLow(true)
.build()
WorkManager.getInstance(context)
.getWorkInfoByIdLiveData(workRequest.id)
.observe(this) { workInfo ->
when (workInfo.state) {
WorkInfo.State.SUCCEEDED -> { /*...*/ }
WorkInfo.State.FAILED -> { /*...*/ }
}
}
WorkManager.enqueueUniqueWork(
"sync_work",
ExistingWorkPolicy.REPLACE,
workRequest
)
WorkManager.beginWith(syncWork)
.then(processWork)
.then(uploadWork)
.enqueue()
WorkManager — это оптимальное решение для:
Используйте его, когда важна надежность выполнения, а не мгновенный результат. Для простых фоновых задач предпочтительнее могут быть корутины или Executors.