Options des tâches de transfert de données en arrière-plan

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 dans lesquelles 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 entre les API, vous devez vous poser les questions suivantes :

  • Le transfert est-il initié par l'utilisateur ?
  • Existe-t-il une API qui gère ce transfert ?
  • Le travail doit-il s'exécuter immédiatement ?
Option Quand l'utiliser Durée Exemples

WorkManager

Pour planifier des tâches d'une durée inférieure à 10 minutes qui doivent s'exécuter lorsque l'application n'est pas visible.

Différable : peut également être ajusté par des contraintes

Immédiat : utilisez setExpedited si le travail doit être exécuté immédiatement.

Synchroniser régulièrement des données avec un serveur

Téléchargement ou importations de contenus multimédias sur le réseau (initié en arrière-plan, et non par l'utilisateur)

Tâche de transfert de données initiée par l'utilisateur

Lorsque le transfert de données est déclenché par l'utilisateur et que vous devez l'informer de sa progression.

Initiée par l'utilisateur (par exemple, en cliquant sur un bouton) : démarre immédiatement

Importer une photo, télécharger un fichier

Service de premier plan

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

connectedDevice : synchronisation des données avec un appareil connecté

shortService : traitement des fichiers en moins de 3 minutes

mediaProcessing : encoder ou décoder un fichier multimédia

API spécifique

Utilisez-le, le cas échéant, pour cette opération spécifique. Vous pouvez ainsi bénéficier d'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. WorkManager est probablement la solution la plus adaptée.

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 tâche convient 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.
  • Si le système interrompt le transfert, cela nuit à l'expérience utilisateur.

Si l'une de ces conditions n'est pas remplie, vous devez plutôt utiliser WorkManager.

Par exemple, une application multimédia peut permettre aux utilisateurs de télécharger des albums pour les lire localement. 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 initiée par l'utilisateur. En revanche, si l'utilisateur souhaite que la playlist téléchargée soit mise à jour périodiquement en arrière-plan sans intervention de sa part, WorkManager serait 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 des tâches. 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 WorkManager.

Voici quelques éléments à retenir lorsque vous utilisez WorkManager pour le transfert de données en arrière-plan :

  • Si vous devez exécuter la tâche le plus rapidement possible, vous pouvez planifier une demande de travail accélérée. Cette option est particulièrement utile si vous planifiez le travail en réponse à une diffusion, à une alarme exacte ou à un message FCM à priorité élevée.
  • Si vous avez besoin que le travail s'exécute périodiquement, vous pouvez planifier un travail périodique. Une demande de travail périodique vous permet de spécifier à peu près la fréquence d'exécution du travail, mais ne garantit pas une heure spécifique. Cela permet au système de planifier les demandes de travail de différentes applications pour équilibrer les exigences sur l'appareil.
  • Vous devez définir des contraintes de tâche pour spécifier les circonstances 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 le job 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 job à un moment où la charge sur le système est équilibrée.
  • WorkManager est libre d'annuler et de relancer un job si nécessaire. Par exemple, l'utilisateur peut éteindre l'appareil pendant l'exécution d'un job. Le système peut alors réessayer le job lorsque l'appareil est à nouveau disponible. Assurez-vous de concevoir et de tester votre workflow pour vous assurer que le cycle d'annulation et de nouvelle tentative fonctionne correctement.
  • Workers de longue durée (service de premier plan) : WorkManager peut prendre en charge les tâches qui durent 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 que les services et les jobs de premier plan, y compris les restrictions concernant le lancement en arrière-plan et les limites d'exécution (les jobs qui durent plus de 10 minutes seront reprogrammés par le système).

JobScheduler est une autre option pour planifier le travail en arrière-plan. Contrairement à WorkManager, il nécessite plus de configuration, mais il vous donne accès à des API qui ne sont pas disponibles dans WorkManager, comme 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.

Identifier les API spécifiques à un cas d'utilisation

Cette requête 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 les requêtes d'IA

Les requêtes d'IA sont destinées à être utilisées dans Gemini dans Android Studio.

Pour en savoir plus sur Gemini dans Studio, consultez https://developer.android.com/studio/gemini/overview.

Utiliser un type de service de premier plan plus spécifique

Si WorkManager et JobScheduler ne conviennent pas à la tâche en arrière-plan spécifique, 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 alternative mieux 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 des données avec le serveur) et vous souhaitez 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.
  • Chiffrer ou déchiffrer des informations

Pour en savoir plus, consultez la documentation shortService.

Utiliser un service de premier plan d'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 pourriez avoir besoin de le faire :

  • Communiquer avec un accessoire Bluetooth, comme un casque ou une montre connectée
  • Transfert de données vers un appareil connecté localement, par une connexion USB, NFC ou une connexion Internet locale

Toutefois, dans ces situations, vous pourrez peut-être 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écifique est disponible pour votre cas d'utilisation, il est généralement préférable de l'utiliser plutôt qu'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 des contenus multimédias.

Ressources supplémentaires