Planifier des tâches avec WorkManager Fait partie d'Android Jetpack
WorkManager est la solution recommandée pour les tâches persistantes. Une tâche est persistante lorsqu'elle reste planifiée lors du redémarrage de l'application et du système. Les tâches persistantes sont plus efficaces pour réaliser la plupart des traitements en arrière-plan, c'est pourquoi WorkManager est la principale API recommandée à cet effet.
Types de tâches persistantes
WorkManager gère trois types de tâches persistantes :
- Exécution immédiate : les tâches doivent commencer immédiatement et se terminer bientôt. Elles peuvent être rendues prioritaires.
- Exécution longue : tâches pouvant durer plus longtemps, parfois plus de 10 minutes.
- Exécution différable : tâches planifiées qui commencent à une date ultérieure et peuvent s'exécuter régulièrement.
La figure 1 décrit la relation entre les différents types de tâches persistantes.
De même, le tableau suivant présente les différents types de tâches.
Type | Fréquence | Pour y accéder |
---|---|---|
Exécution immédiate | Ponctuelle | OneTimeWorkRequest et Worker .
Pour rendre une tâche prioritaire, appelez |
Exécution longue | Ponctuelle ou régulière | Tous les WorkRequest ou Worker . Appelez setForeground() dans Worker pour gérer la notification.
|
Exécution différable | Ponctuelle ou régulière | PeriodicWorkRequest et Worker . |
Pour en savoir plus sur la configuration de WorkManager, consultez le guide Définir vos WorkRequest.
Fonctionnalités
En plus de fournir une API plus simple et plus cohérente, WorkManager présente un certain nombre d'autres avantages clés :
Contraintes liées aux tâches
Définissez de manière déclarative les conditions optimales pour vos tâches à l'aide de contraintes liées aux tâches. Par exemple, ne les exécutez que lorsque l'appareil est connecté à un réseau dont l'usage n'est pas facturé, lorsqu'il est inactif ou qu'il dispose d'une batterie suffisante.
Planification efficace
WorkManager vous permet de planifier des tâches afin de les exécuter de façon ponctuelle ou répétée pendant des périodes de planification flexibles. Les tâches peuvent également être étiquetées et nommées, ce qui vous permet de planifier des tâches uniques et remplaçables, et de surveiller ou d'annuler des groupes de tâches ensemble.
Les tâches planifiées sont stockées dans une base de données SQLite gérée en interne. WorkManager s'assure que ces tâches persistent et sont reprogrammées lors des redémarrages de l'appareil.
De plus, WorkManager respecte les fonctionnalités d'économie d'énergie et les bonnes pratiques telles que le mode Sommeil. Vous n'avez donc pas à vous en soucier.
Tâche prioritaire
Vous pouvez utiliser WorkManager pour planifier une exécution immédiate en arrière-plan. Utilisez les tâches prioritaires pour les tâches importantes pour l'utilisateur et qui se terminent en quelques minutes.
Règle de nouvelle tentative flexible
Il arrive que la tâche échoue. WorkManager propose des règles de nouvelles tentatives flexibles, y compris une règle d'intervalle exponentiel entre les tentatives configurable.
Association de tâches
Pour les tâches complexes, associez des tâches individuelles à l'aide d'une interface intuitive qui vous permet de contrôler les éléments qui s'exécutent de manière séquentielle et en parallèle.
Kotlin
val continuation = WorkManager.getInstance(context) .beginUniqueWork( Constants.IMAGE_MANIPULATION_WORK_NAME, ExistingWorkPolicy.REPLACE, OneTimeWorkRequest.from(CleanupWorker::class.java) ).then(OneTimeWorkRequest.from(WaterColorFilterWorker::class.java)) .then(OneTimeWorkRequest.from(GrayScaleFilterWorker::class.java)) .then(OneTimeWorkRequest.from(BlurEffectFilterWorker::class.java)) .then( if (save) { workRequest<SaveImageToGalleryWorker>(tag = Constants.TAG_OUTPUT) } else /* upload */ { workRequest<UploadWorker>(tag = Constants.TAG_OUTPUT) } )
Java
WorkManager.getInstance(...) .beginWith(Arrays.asList(workA, workB)) .then(workC) .enqueue();
Pour chaque tâche, vous pouvez définir les données d'entrée et de sortie correspondantes. Lorsque les tâches sont associées, WorkManager transmet automatiquement les données de sortie d'une tâche à la suivante.
Interopérabilité intégrée des exécutions de threads
WorkManager s'intègre parfaitement aux coroutines et à RxJava, et sa flexibilité permet de brancher vos propres API asynchrones.
Travaillez de façon fiable avec WorkManager
WorkManager est destiné aux tâches nécessaires à une exécution fiable ; même si l'utilisateur quitte un écran, que l'application se ferme ou que l'appareil redémarre. Par exemple :
- Envoyer des journaux ou des analyses aux services de backend.
- Synchroniser régulièrement des données d'application avec un serveur.
WorkManager n'est pas conçu pour une exécution en arrière-plan qui peut être interrompue en toute sécurité si le processus de l'application s'arrête. Il ne s'agit pas non plus d'une solution générale pour toutes les tâches qui nécessitent une exécution immédiate. Consultez le guide de traitement en arrière-plan pour déterminer la solution qui répond à vos besoins.
Relation avec les autres API
Bien que les coroutines soient la solution recommandée pour certains cas d'utilisation, ne les utilisez pas pour les tâches persistantes. Il est important de noter que les coroutines sont un framework de simultanéité, tandis que WorkManager est une bibliothèque pour les tâches persistantes. De même, n'utilisez AlarmManager que pour les horloges ou les agendas.
API | Paramètre recommandé pour | Relation avec WorkManager |
---|---|---|
Coroutines | Toutes les tâches asynchrones qui n'ont pas besoin d'être persistantes. | Les coroutines sont le moyen standard de quitter le thread principal en Kotlin. Toutefois, elles quittent également la mémoire à la fermeture de l'application. Pour les tâches persistantes, utilisez WorkManager. |
Gestionnaire d'alarmes (AlarmManager) | Alarmes uniquement. | Contrairement à WorkManager, AlarmManager active un appareil en mode Sommeil. Il n'est donc pas efficace en termes d'alimentation et de gestion des ressources. Utilisez-le uniquement pour des alarmes ou des notifications précises, telles que des événements d'agenda, et non pour des tâches en arrière-plan. |
Remplacement des API obsolètes
L'API WorkManager est recommandée pour remplacer toutes les API de planification en arrière-plan Android précédentes, y compris FirebaseJobDispatcher, GcmNetworkManager et Job Scheduler.
Premiers pas
Consultez le guide de démarrage pour commencer à utiliser WorkManager dans votre application.
Ressources supplémentaires
Pour en savoir plus sur WorkManager
, consultez les ressources suivantes.
Exemples
Vidéos
- Série de vidéos Workmanager - MAD Skills
- Travailler avec WorkManager, du Sommet des développeurs Android 2018
- WorkManager : fonctionnalités avancées, du Sommet des développeurs Android 2019
Blogs
Recommandations personnalisées
- Remarque : Le texte du lien s'affiche lorsque JavaScript est désactivé
- Démarrage des applications