De nombreuses applications doivent transférer des données en arrière-plan. Ce guide présente les options de transfert de données en arrière-plan fiables et fournit des exemples d'implémentation.
Scénarios courants de transfert de données en arrière-plan
Cette section décrit certaines situations courantes où les applications doivent transférer des données vers ou depuis l'appareil, et vous aide à choisir l'outil adapté à votre situation.
Lorsque vous choisissez une API, posez-vous les questions suivantes:
- Le transfert est-il initié par l'utilisateur ?
- Existe-t-il une API existante qui gère ce transfert ?
- La tâche doit-elle s'exécuter immédiatement ?
Option | Quand l'utiliser | Durée | Exemples |
---|---|---|---|
Pour planifier des tâches de moins de 10 minutes qui doivent s'exécuter lorsque l'application n'est pas visible. |
Déférrable: peut également être ajusté par des contraintes Immédiat: utilisez
|
Synchroniser régulièrement des données avec un serveur Téléchargement ou importation de contenus multimédias sur le réseau Déclenché en arrière-plan (et non par l'utilisateur) |
|
Lorsque le transfert de données est déclenché par l'utilisateur et que vous devez le tenir informé de la progression du transfert. |
Initiée par l'utilisateur (clic sur un bouton, par exemple) : démarre immédiatement |
Importer une photo, télécharger un fichier |
|
Pour les tâches courtes et critiques, ou lorsque WorkManager n'est pas une option. Une notification informe l'utilisateur de la progression du transfert. |
Démarre immédiatement |
|
|
À utiliser si un tel élément existe pour cette opération particulière. Peut apporter des avantages tels que des performances optimisées et une meilleure intégration du système. |
Variable |
Synchroniser des données avec un appareil connecté |
Si votre scénario ne figure pas dans la liste des scénarios courants, consultez les sections suivantes pour trouver l'API la plus adaptée à votre cas d'utilisation. Il est probable que WorkManager soit approprié.
Utiliser le type de tâche de transfert de données déclenchée par l'utilisateur
Si votre application doit transférer des données vers un serveur distant, vous pouvez utiliser une tâche de transfert de données lancée par l'utilisateur. Ce type de poste est approprié si les conditions suivantes sont remplies:
- L'utilisateur a commencé le transfert de données
- Vous devez informer l'utilisateur de la progression du transfert de données.
- L'expérience utilisateur est affectée si le système interrompt le transfert.
Si l'une de ces conditions n'est pas remplie, vous devez utiliser WorkManager à la place.
Par exemple, une application multimédia peut permettre aux utilisateurs de télécharger des albums pour les lire en local. Si un utilisateur souhaite télécharger une playlist et la lire immédiatement, vous pouvez utiliser le type de tâche de transfert de données déclenchée par l'utilisateur. En revanche, si l'utilisateur souhaite que la playlist téléchargée soit mise à jour régulièrement en arrière-plan sans qu'il n'ait à intervenir, WorkManager est un meilleur choix.
Pour en savoir plus, y compris sur la création et l'exécution d'une tâche de transfert de données déclenchée par l'utilisateur, consultez la documentation sur les tâches de transfert de données déclenchées par l'utilisateur.
Utiliser WorkManager pour le transfert de données
Dans la plupart des cas, WorkManager est la meilleure option lorsque vous devez planifier une tâche. N'oubliez pas que vous devez concevoir les tâches de manière à ce qu'elles puissent être interrompues ou différées par le système. Pour en savoir plus, consultez la documentation de WorkManager.
Voici quelques points à garder à l'esprit lorsque vous utilisez WorkManager pour le transfert de données en arrière-plan:
- Si vous devez exécuter la tâche dès que possible, vous pouvez planifier une demande de travail accélérée. Cette option est particulièrement utile si vous planifiez la tâche en réponse à une diffusion, une alarme exacte ou un message FCM de priorité élevée.
- Si vous devez exécuter la tâche régulièrement, vous pouvez planifier des tâches périodiques. Une requête de travail périodique vous permet de spécifier approximativement la fréquence d'exécution de la tâche, mais ne garantit pas une heure spécifique. Cela permet au système de planifier les requêtes de travail de différentes applications afin d'équilibrer les demandes sur l'appareil.
- Vous devez définir des contraintes de tâche pour spécifier les conditions appropriées pour exécuter votre tâche. Par exemple, si votre application doit télécharger des ressources non urgentes, vous pouvez spécifier que la tâche doit s'exécuter lorsque l'appareil est en charge et connecté à un réseau non facturé à l'usage. WorkManager peut ensuite exécuter votre tâche à un moment qui équilibre la charge sur le système.
- WorkManager est libre d'annuler et de relancer une tâche si nécessaire. Par exemple, l'utilisateur peut éteindre l'appareil pendant l'exécution d'une tâche. Le système peut alors réessayer la tâche lorsque l'appareil est à nouveau disponible. Veillez à concevoir et à tester votre workflow pour vous assurer que le cycle d'annulation et de nouvelle tentative fonctionne correctement.
- Nœuds de calcul de longue durée (service de premier plan):WorkManager peut prendre en charge les tâches qui prennent plus de 10 minutes en créant un service de premier plan pour votre application. Cela signifie qu'il est soumis aux mêmes restrictions qu'un service de premier plan et des tâches, y compris les restrictions de lancement en arrière-plan et les limites d'exécution (les tâches qui prennent plus de 10 minutes seront reprogrammées par le système).
JobScheduler est une autre option de planification des tâches en arrière-plan. Contrairement à WorkManager, vous devez effectuer plus de configurations, mais vous avez accès à des API qui ne sont pas actuellement disponibles dans WorkManager, telles que setPrefetch
, setUserInitiated
et getPendingJobReasons
.
Utiliser une API spécifique
Utilisez une API spécifique si elle est disponible (comme le gestionnaire d'appareils associés). Sinon, utilisez un service de premier plan connectedDevice
.
Requête d'IA
Identifier les API spécifiques à un cas d'utilisation
Cette invite demande des API spécifiques pour les tâches de transfert de données.
I want to transfer data from an Android mobile device to [device_type]. Is there a specific API available?
Utiliser un type de service de premier plan plus spécifique
Si WorkManager et JobScheduler ne sont pas adaptés à la tâche en arrière-plan, vous devrez peut-être utiliser un service de premier plan.
Comme toujours, lorsque vous envisagez d'utiliser un service de premier plan, vous devez vous demander s'il existe une API de remplacement plus adaptée à votre cas d'utilisation.
Utiliser un service de premier plan de courte durée
Si votre application doit effectuer une tâche courte et critique, un service de premier plan shortService
peut être la meilleure option. Voici quelques situations dans lesquelles un service de premier plan shortService
peut être approprié:
- L'utilisateur lance une action (comme la synchronisation de données avec le serveur) et vous voulez vous assurer que l'opération se termine, même si l'utilisateur envoie immédiatement l'application en arrière-plan.
- Enregistrement des informations en mémoire dans un espace de stockage persistant.
- Chiffrement ou déchiffrement d'informations
Pour en savoir plus, consultez la documentation shortService
.
Utiliser un service de premier plan sur un appareil connecté
Si vous devez transférer des données vers un autre appareil local, vous pouvez utiliser un service de premier plan connectedDevice
. Voici quelques situations courantes dans lesquelles vous devrez peut-être effectuer cette opération:
- Communiquer avec un accessoire Bluetooth, comme un casque ou une montre connectée
- Transfert de données vers un appareil connecté en local, via une connexion USB, NFC ou une connexion Internet locale
Toutefois, dans ces situations, vous pouvez utiliser le gestionnaire d'appareils associés pour vous connecter à l'appareil au lieu d'utiliser un service de premier plan. Comme toujours, si une API à usage spécial est disponible pour votre cas d'utilisation, c'est généralement un meilleur choix que d'utiliser un service de premier plan.
Utiliser le nouveau service de premier plan de traitement multimédia
Si vous devez traiter des données multimédias, vous pouvez utiliser le service de premier plan mediaProcessing
. Ce type de service est disponible si votre application cible Android 15 ou version ultérieure. Par exemple, ce type de service est approprié si votre application doit transcoder des contenus multimédias d'un format à un autre pour la lecture. Pour en savoir plus, consultez la documentation sur le service de premier plan de traitement multimédia.
Ressources supplémentaires
- Conseils sur le transfert de données initié par l'utilisateur
- Présentation des services de premier plan