Lorsque vous souhaitez exécuter des tâches qui continueront à s'exécuter même si l'application quitte l'état visible, nous vous recommandons d'utiliser la bibliothèque Jetpack WorkManager. WorkManager dispose d'un mécanisme de planification robuste qui permet aux tâches de persister lors des redémarrages d'applications et d'appareils.
Types de travaux
WorkManager gère trois types de tâches :
- 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.
De même, le tableau suivant présente les différents types de tâches.
Saisie | Périodicité | Pour y accéder |
---|---|---|
Immédiateté | Ponctuel | OneTimeWorkRequest et Worker . Pour rendre une tâche prioritaire, appelez setExpedited() sur votre OneTimeWorkRequest. |
Longue durée | 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 de WorkManager
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
Ce tableau montre le lien entre WorkManager et les API similaires. Ces informations peuvent vous aider à choisir l'API adaptée aux besoins de votre application.
API | Recommandé pour | Relation avec WorkManager |
---|---|---|
Coroutines | Toutes les tâches asynchrones qui n'ont pas besoin de persister si l'application quitte l'état visible. | Les coroutines sont le moyen standard de quitter le thread principal en Kotlin. Toutefois, elles s'arrêtent dès que l'application est fermée. Pour les tâches qui doivent persister même après la fermeture de l'application, utilisez WorkManager. |
Gestionnaire d'alarmes (AlarmManager) | Alarmes uniquement. | Contrairement aux workers standards de WorkManager, les alarmes exactes d'AlarmManager activent 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 récurrentes. |
Remplacer les API obsolètes
L'API WorkManager est recommandée pour remplacer les API de planification en arrière-plan Android précédentes, y compris FirebaseJobDispatcher
et GcmNetworkManager
.
Premiers pas
Consultez le guide de démarrage pour commencer à utiliser WorkManager dans votre application.
Ressources supplémentaires
Les sections suivantes fournissent des ressources supplémentaires.
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