Partager via


Recommandations en matière de tâches en arrière-plan

Assurez-vous que votre application répond aux exigences relatives à l’exécution de tâches en arrière-plan.

Conseils sur les tâches en arrière-plan

Prenez en compte les conseils suivants lors du développement de votre tâche en arrière-plan et avant de publier votre application.

Si vous utilisez une tâche en arrière-plan pour lire des médias en arrière-plan, consultez Lire le média en arrière-plan pour plus d’informations sur les améliorations apportées à Windows 10, version 1607, ce qui facilite grandement la lecture.

Tâches en arrière-plan in-process et hors processus : Windows 10, version 1607, introduit des tâches en arrière-plan in-process qui vous permettent d’exécuter du code en arrière-plan dans le même processus que votre application de premier plan. Tenez compte des facteurs suivants lorsque vous décidez s’il faut effectuer des tâches en arrière-plan in-process et out-of-process :

Considération Impact
Résilience Si votre processus en arrière-plan s’exécute dans un autre processus, un blocage dans votre processus en arrière-plan ne prend pas en charge votre application de premier plan. En outre, l’activité en arrière-plan peut être arrêtée, même dans votre application, si elle s’exécute au-delà des limites de temps d’exécution. La séparation du travail en arrière-plan en une tâche distincte de l’application de premier plan peut être un meilleur choix lorsqu’il n’est pas nécessaire que les processus de premier plan et d’arrière-plan communiquent entre eux (car l’un des principaux avantages des tâches en arrière-plan in-process est qu’ils suppriment la nécessité d’une communication interprocessus).
Simplicité Les tâches en arrière-plan en cours ne nécessitent pas de communication interprocessus et sont moins complexes à écrire.
Déclencheurs disponibles Les tâches en arrière-plan en cours ne prennent pas en charge les déclencheurs suivants : DeviceUseTrigger, DeviceServicingTrigger et IoTStartupTask.
VoIP Les tâches en arrière-plan in-process ne prennent pas en charge l’activation d’une tâche en arrière-plan VoIP au sein de votre application.

Limites sur le nombre d’instances de déclencheur : il existe des limites au nombre d’instances de certains déclencheurs qu’une application peut inscrire. Une application ne peut inscrire ApplicationTrigger, MediaProcessingTrigger et DeviceUseTrigger qu’une fois par instance de l’application. Si une application dépasse cette limite, l’inscription lève une exception.

Quotas d’UC : les tâches en arrière-plan sont limitées par la quantité de temps d’utilisation de l’horloge murale qu’ils obtiennent en fonction du type de déclencheur. La plupart des déclencheurs sont limités à 30 secondes d’utilisation de l’horloge murale, tandis que certains ont la possibilité d’exécuter jusqu’à 10 minutes afin d’effectuer des tâches intensives. Les tâches en arrière-plan doivent être légères pour économiser la durée de vie de la batterie et offrir une meilleure expérience utilisateur pour les applications de premier plan. Consultez Prendre en charge votre application avec des tâches en arrière-plan pour les contraintes de ressources appliquées aux tâches en arrière-plan.

Gérer les tâches en arrière-plan : votre application doit obtenir la liste des tâches en arrière-plan inscrites, s’inscrire aux gestionnaires de progression et d’achèvement et gérer ces événements de manière appropriée. Vos classes de tâches en arrière-plan doivent signaler la progression, l’annulation et l’achèvement. Pour plus d’informations, consultez Gérer une tâche en arrière-plan annulée et Surveiller la progression et l’achèvement des tâches en arrière-plan.

Utilisez BackgroundTaskDeferral : si votre classe de tâches en arrière-plan exécute du code asynchrone, veillez à utiliser des reports. Sinon, votre tâche en arrière-plan peut être arrêtée prématurément lorsque la méthode Run retourne (ou la méthode OnBackgroundActivated dans le cas de tâches en arrière-plan in-process). Pour plus d’informations, consultez Créer et inscrire une tâche en arrière-plan hors processus.

Vous pouvez également demander un report et utiliser async/await pour effectuer des appels de méthode asynchrone. Fermez le report après les appels de méthode Await .

Mettez à jour le manifeste de l’application : pour les tâches en arrière-plan qui s’exécutent en dehors du processus, déclarez chaque tâche en arrière-plan dans le manifeste de l’application, ainsi que le type de déclencheurs qu’il utilise. Sinon, votre application ne pourra pas inscrire la tâche en arrière-plan au moment de l’exécution.

Si vous avez plusieurs tâches en arrière-plan, déterminez s’ils doivent s’exécuter dans le même processus hôte ou être séparés dans différents processus hôtes. Placez-les dans des processus hôtes distincts si vous craignez qu’une défaillance dans une tâche en arrière-plan puisse entraîner d’autres tâches en arrière-plan. Utilisez l’entrée de groupe de ressources dans le concepteur de manifeste pour regrouper les tâches en arrière-plan dans différents processus hôtes.

Pour définir le groupe de ressources, ouvrez le concepteur Package.appxmanifest, choisissez Déclarations et ajoutez une déclaration App Service :

Paramètre de groupe de ressources

Pour plus d’informations sur le paramètre de groupe de ressources, consultez la référence du schéma d’application.

Les tâches en arrière-plan qui s’exécutent dans le même processus que l’application de premier plan n’ont pas besoin de se déclarer dans le manifeste de l’application. Pour plus d’informations sur la déclaration de tâches en arrière-plan qui s’exécutent hors processus dans le manifeste, consultez Déclarer des tâches en arrière-plan dans le manifeste de l’application.

Préparer les mises à jour d’application : si votre application est mise à jour, créez et inscrivez une tâche en arrière-plan ServicingComplete (voir SystemTriggerType) pour annuler l’inscription des tâches en arrière-plan pour la version précédente de l’application et inscrivez les tâches en arrière-plan pour la nouvelle version. Il s’agit également d’un moment approprié pour effectuer des mises à jour d’application qui peuvent être nécessaires en dehors du contexte d’exécution au premier plan.

Demande d’exécution de tâches en arrière-plan :

Important à partir de Windows 10, les applications ne doivent plus être sur l’écran de verrouillage en tant que prérequis pour exécuter des tâches en arrière-plan.

les applications plateforme Windows universelle (UWP) peuvent exécuter tous les types de tâches pris en charge sans être épinglées à l’écran de verrouillage. Toutefois, les applications doivent appeler GetAccessState et vérifier que l’application n’est pas refusée de s’exécuter en arrière-plan. Vérifiez que GetAccessStatus ne retourne pas l’une des énumérations BackgroundAccessStatus refusées. Par exemple, cette méthode retourne BackgroundAccessStatus.DeniedByUser si l’utilisateur a refusé explicitement les autorisations de tâche en arrière-plan pour votre application dans les paramètres de l’appareil.

Si votre application n’est pas exécutée en arrière-plan, votre application doit appeler RequestAccessAsync et vérifier que la réponse n’est pas refusée avant d’inscrire des tâches en arrière-plan.

Pour plus d’informations sur le choix de l’utilisateur autour de l’activité en arrière-plan et de l’économiseur de batterie, consultez Optimiser l’activité en arrière-plan.

Liste de contrôle des tâches en arrière-plan

S’applique aux tâches en arrière-plan in-process et out-of-process

  • Associez votre tâche en arrière-plan au déclencheur approprié.
  • Ajoutez des conditions pour vous assurer que votre tâche en arrière-plan s’exécute correctement.
  • Gérez la progression, l’achèvement et l’annulation des tâches en arrière-plan.
  • Réinscrivez vos tâches en arrière-plan lors du lancement de l’application. Cela garantit qu’elles sont inscrites la première fois que l’application est lancée. Il permet également de détecter si l’utilisateur a désactivé les fonctionnalités d’exécution en arrière-plan de votre application (en cas d’échec de l’inscription des événements).
  • Recherchez les erreurs d’inscription des tâches en arrière-plan. Si nécessaire, essayez de réinscrire la tâche en arrière-plan avec différentes valeurs de paramètre.
  • Pour toutes les familles d’appareils, à l’exception du bureau, si l’appareil devient faible en mémoire, les tâches en arrière-plan peuvent être arrêtées. Si une exception hors mémoire n’est pas exposée ou si l’application ne la gère pas, la tâche en arrière-plan est arrêtée sans avertissement et sans déclencher l’événement OnCanceled. Cela permet de garantir l’expérience utilisateur de l’application au premier plan. Votre tâche en arrière-plan doit être conçue pour gérer ce scénario.

S’applique uniquement aux tâches en arrière-plan hors processus

  • Créez votre tâche en arrière-plan dans un composant Windows Runtime.
  • N’affichez pas l’interface utilisateur autre que les toasts, vignettes et mises à jour de badge à partir de la tâche en arrière-plan.
  • Dans la méthode Run , demandez des reports pour chaque appel de méthode asynchrone et fermez-les lorsque la méthode est terminée. Vous pouvez également utiliser un report avec async/await.
  • Utilisez le stockage persistant pour partager des données entre la tâche en arrière-plan et l’application.
  • Déclarez chaque tâche en arrière-plan dans le manifeste de l’application, ainsi que le type de déclencheurs qu’il utilise. Vérifiez que les types de point d’entrée et de déclencheur sont corrects.
  • Ne spécifiez pas d’élément exécutable dans le manifeste, sauf si vous utilisez un déclencheur qui doit être exécuté dans le même contexte que l’application (par exemple, ControlChannelTrigger).

S’applique uniquement aux tâches en arrière-plan in-process

  • Lors de l’annulation d’une tâche, assurez-vous que le BackgroundActivated gestionnaire d’événements s’arrête avant que l’annulation se produise ou que l’ensemble du processus soit arrêté.
  • Écrire des tâches en arrière-plan qui sont de courte durée. La plupart des tâches en arrière-plan sont limitées à 30 secondes d’utilisation de l’horloge murale.

Choses à éviter

  • Réduisez l’utilisation de la communication entre processus via COM ou RPC.
  • Le processus avec lequel vous essayez de communiquer peut ne pas être dans un état en cours d’exécution, ce qui peut entraîner un blocage.
  • Il est possible de consacrer beaucoup de temps à faciliter la communication entre processus et à compter sur le temps alloué pour exécuter votre tâche en arrière-plan.
  • Ne vous fiez pas à l’interaction utilisateur dans les tâches en arrière-plan.