WorkManager et tâches en arrière-plan
Planifiez des tâches en arrière-plan garanties avec WorkManager. Utilisez OneTimeWorkRequest, PeriodicWorkRequest, des contraintes, le transfert de données et l’enchaînement des tâches.
WorkManager et tâches en arrière-plan est une leçon Android Academy gratuite sur CoddyKit. Ceci est la leçon 5 sur 6. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Android Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Android Academy comprend 6 leçons au total.
Tâches en arrière-plan sous Android
Android limite fortement les tâches en arrière-plan pour économiser la batterie. Avant WorkManager, les développeurs utilisaient :
- AsyncTask (obsolète)
- AlarmManager (peu fiable après les redémarrages et en mode Doze)
- JobScheduler (API complexe)
- Services (peuvent être arrêtés, sans possibilité de réessai)
WorkManager est la solution recommandée pour les tâches en arrière-plan différables et garanties.
Qu’est-ce que WorkManager ?
WorkManager garantit l’exécution de vos tâches même si l’application est arrêtée ou si l’appareil redémarre. Il :
- conserve les tâches après les redémarrages
- réessaie automatiquement en cas d’échec
- prend en charge les contraintes (WiFi uniquement, uniquement pendant la recharge, etc.)
- fonctionne avec l’API 14 et les versions ultérieures
- s’intègre aux coroutines Kotlin via
CoroutineWorker
Configuration
Ajoutez WorkManager à app/build.gradle :
dependencies {
implementation 'androidx.work:work-runtime-ktx:2.9.0'
}Créer un Worker
Étendez CoroutineWorker et implémentez doWork(). Renvoyez Result.success(), Result.failure() ou Result.retry() :
class SyncWorker(context: Context, params: WorkerParameters) : CoroutineWorker(context, params) {
override suspend fun doWork(): Result {
return try {
// This runs on a background coroutine
val repo = UserRepository(applicationContext)
repo.syncFromNetwork()
Result.success()
} catch (e: Exception) {
if (runAttemptCount < 3) Result.retry()
else Result.failure()
}
}
}OneTimeWorkRequest
Planifiez une tâche unique et mettez-la en file d’attente :
val syncWork = OneTimeWorkRequestBuilder<SyncWorker>()
.setInitialDelay(10, TimeUnit.MINUTES) // optional delay
.build()
WorkManager.getInstance(context).enqueue(syncWork)
// With a unique name (prevents duplicates):
WorkManager.getInstance(context).enqueueUniqueWork(
"sync_work",
ExistingWorkPolicy.KEEP, // don't enqueue if already pending
syncWork
)PeriodicWorkRequest
Planifiez des tâches répétitives. L’intervalle minimal est de 15 minutes :
val periodicSync = PeriodicWorkRequestBuilder<SyncWorker>(
repeatInterval = 1, TimeUnit.HOURS
).build()
WorkManager.getInstance(context).enqueueUniquePeriodicWork(
"hourly_sync",
ExistingPeriodicWorkPolicy.KEEP,
periodicSync
)Contraintes
Exécutez les tâches uniquement lorsque les conditions sont réunies : batterie suffisamment chargée, WiFi connecté, etc. :
val constraints = Constraints.Builder()
.setRequiredNetworkType(NetworkType.UNMETERED) // WiFi only
.setRequiresBatteryNotLow(true)
.setRequiresCharging(false)
.build()
val work = OneTimeWorkRequestBuilder<SyncWorker>()
.setConstraints(constraints)
.build()
WorkManager.getInstance(context).enqueue(work)Données d’entrée et de sortie
Transmettez des données à un Worker et récupérez-en les résultats à l’aide d’objets Data :
// Enqueue with input data:
val inputData = workDataOf("user_id" to 42)
val work = OneTimeWorkRequestBuilder<SyncWorker>()
.setInputData(inputData)
.build()
// Inside the Worker:
class SyncWorker(...) : CoroutineWorker(...) {
override suspend fun doWork(): Result {
val userId = inputData.getInt("user_id", -1)
// Pass output data back:
val output = workDataOf("synced_count" to 10)
return Result.success(output)
}
}Observer l’état d’une tâche
Observez la progression d’une tâche avec getWorkInfoByIdLiveData :
val workRequest = OneTimeWorkRequestBuilder<SyncWorker>().build()
WorkManager.getInstance(this).enqueue(workRequest)
WorkManager.getInstance(this)
.getWorkInfoByIdLiveData(workRequest.id)
.observe(this) { info ->
when (info?.state) {
WorkInfo.State.RUNNING -> binding.tvStatus.text = "Syncing..."
WorkInfo.State.SUCCEEDED -> binding.tvStatus.text = "Done!"
WorkInfo.State.FAILED -> binding.tvStatus.text = "Failed"
else -> {}
}
}Enchaîner les tâches
Exécutez les tâches séquentiellement ou en parallèle à l’aide de chaînes de tâches :
val downloadWork = OneTimeWorkRequestBuilder<DownloadWorker>().build()
val processWork = OneTimeWorkRequestBuilder<ProcessWorker>().build()
val uploadWork = OneTimeWorkRequestBuilder<UploadWorker>().build()
// Sequential: download → process → upload
WorkManager.getInstance(context)
.beginWith(downloadWork)
.then(processWork)
.then(uploadWork)
.enqueue()
// Parallel then merge:
WorkManager.getInstance(context)
.beginWith(listOf(downloadWork, processWork)) // both run in parallel
.then(uploadWork) // runs after both finish
.enqueue()WorkManager ou solutions alternatives
Quand utiliser quelle solution :
- WorkManager — tâches différables, garanties et fondées sur des contraintes. Idéal pour les synchronisations, les téléversements et le nettoyage.
- Coroutines / ViewModel — tâches liées à l’ouverture de l’application. Elles s’arrêtent lorsque l’application est arrêtée.
- AlarmManager — alarmes à heure précise (rappels de calendrier). Nécessite une gestion attentive de la batterie.
- Service au premier plan — tâches longues dont l’utilisateur est informé (lecture de musique, navigation).
Vérification rapide
Quel est l’intervalle minimal entre deux répétitions d’un PeriodicWorkRequest ?
Récapitulatif : WorkManager
WorkManager est l’outil adapté aux tâches en arrière-plan garanties :
- Étendez
CoroutineWorkeret implémentezdoWork() - Renvoyez
Result.success(),.failure()ou.retry() - Utilisez
OneTimeWorkRequestpour les exécutions uniques etPeriodicWorkRequestpour les exécutions récurrentes - Ajoutez des
Constraintspour le WiFi uniquement, les conditions de batterie, etc. - Transmettez les données avec
workDataOf() - Enchaînez les tâches avec
beginWith().then().enqueue()
Ensuite : les composants Material Design pour créer de belles interfaces.
Questions Fréquemment Posées
La leçon « WorkManager et tâches en arrière-plan » est-elle gratuite ?
Oui — le texte complet de « WorkManager et tâches en arrière-plan » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Android Academy, passe à CoddyKit PRO. Le cours Android Academy comprend 6 leçons au total.
Qu'est-ce que j'apprendrai dans « WorkManager et tâches en arrière-plan » ?
Planifiez des tâches en arrière-plan garanties avec WorkManager. Utilisez OneTimeWorkRequest, PeriodicWorkRequest, des contraintes, le transfert de données et l’enchaînement des tâches. Tu pratiques Android Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Android Academy ?
Aucune expérience préalable n'est requise. Android Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 5 sur 6.
Combien de temps prend la leçon « WorkManager et tâches en arrière-plan » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Android Academy ?
Oui. Chaque leçon Android Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Retrofit et API REST
- Charger des images avec Coil
- Gestion des erreurs et expérience utilisateur
- Notifications push
- WorkManager et tâches en arrière-plan
- Publier sur le Play Store