Tâches persistantes Inclus dans Android Jetpack.
Les tâches sont persistantes lorsqu'elles restent planifiées lors des redémarrages de l'application et du système. redémarre. WorkManager est la solution recommandée pour les tâches persistantes. Étant donné que la plupart des traitements en arrière-plan sont mieux réalisés via un travail persistant, WorkManager est donc aussi la principale API recommandée pour les tâches d'arrière-plan. en général.
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 être exécutées plus longtemps, voire plus longtemps que 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 | Périodicité | Pour y accéder |
---|---|---|
Immédiateté | Ponctuel | OneTimeWorkRequest et Worker . Pour 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) { workRequestS<aveImageToGalleryWorker(>tag = Constants.TAG_OUTPUT) } else /* upload */ { workRequestU<ploadWorker(>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 devez pas les utiliser pour un travail persistant. Il est important de noter que les coroutines est un framework de simultanéité, tandis que WorkManager est une bibliothèque de ressources travail. De même, n'utilisez AlarmManager que pour les horloges ou les agendas.
API | 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. |
Remplacer les API obsolètes
L'API WorkManager est recommandée pour remplacer toutes les versions précédentes d'Android
API de planification en arrière-plan, y compris FirebaseJobDispatcher
,
GcmNetworkManager
et JobScheduler
.
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, tirée de l'édition 2019 d'Android Dev Sommet