Partager via


Prendre en charge votre application avec des tâches en arrière-plan

Les rubriques de cette section vous montrent comment exécuter du code léger en arrière-plan en réponse aux déclencheurs. Vous pouvez utiliser des tâches en arrière-plan pour fournir des fonctionnalités lorsque votre application est suspendue ou non en cours d’exécution. Vous pouvez également utiliser des tâches en arrière-plan pour les applications de communication en temps réel telles que VOIP, courrier et messagerie instantanée.

Lecture de médias en arrière-plan

À compter de Windows 10, version 1607, la lecture audio en arrière-plan est beaucoup plus facile. Pour plus d’informations, consultez Lire le média en arrière-plan .

Tâches en arrière-plan in-process et hors processus

Il existe deux approches pour implémenter des tâches en arrière-plan :

  • In-process : l’application et son processus en arrière-plan s’exécutent dans le même processus
  • Hors processus : l’application et le processus en arrière-plan s’exécutent dans des processus distincts.

La prise en charge en arrière-plan in-process a été introduite dans Windows 10, version 1607, pour simplifier l’écriture de tâches en arrière-plan. Toutefois, vous pouvez toujours écrire des tâches en arrière-plan hors processus. Consultez les instructions relatives aux tâches en arrière-plan pour obtenir des recommandations sur l’écriture d’une tâche en arrière-plan in-process ou hors processus.

Les tâches en arrière-plan hors processus sont plus résilientes, car le processus en arrière-plan ne peut pas réduire votre processus d’application en cas de problème. Mais la résilience se produit au prix d’une plus grande complexité pour gérer la communication entre processus entre l’application et la tâche en arrière-plan.

Les tâches en arrière-plan hors processus sont implémentées en tant que classes légères qui implémentent l’interface IBackgroundTask exécutée par le système d’exploitation dans un processus distinct (backgroundtaskhost.exe). Inscrivez une tâche en arrière-plan à l’aide de la classe BackgroundTaskBuilder. Le nom de la classe est utilisé pour spécifier le point d’entrée lorsque vous inscrivez la tâche en arrière-plan.

Dans Windows 10, version 1607, vous pouvez activer l’activité en arrière-plan sans créer de tâche en arrière-plan. Vous pouvez à la place exécuter votre code en arrière-plan directement à l’intérieur du processus de l’application de premier plan.

Pour commencer rapidement avec les tâches en arrière-plan in-process, consultez Créer et inscrire une tâche en arrière-plan in-process.

Pour commencer rapidement avec les tâches en arrière-plan hors processus, consultez Créer et inscrire une tâche en arrière-plan hors processus.

Conseil

 À compter de Windows 10, vous n’avez plus besoin de placer une application sur l’écran de verrouillage en tant que prérequis pour l’inscription d’une tâche en arrière-plan.

Tâches en arrière-plan pour les événements système

Votre application peut répondre aux événements générés par le système en inscrivant une tâche en arrière-plan avec la classe SystemTrigger. Une application peut utiliser l’un des déclencheurs d’événements système suivants (définis dans SystemTriggerType)

Nom du déclencheur Description
InternetAvailable Internet devient disponible.
NetworkStateChange Une modification réseau telle qu’une modification du coût ou de la connectivité se produit.
OnlineIdConnectedStateChange ID en ligne associé au compte change.
SmsReceived Un nouveau sms est reçu par un appareil haut débit mobile installé.
TimeZoneChange Le fuseau horaire change sur l’appareil (par exemple, lorsque le système ajuste l’horloge pour l’heure d’été).

Pour plus d’informations, consultez Répondre aux événements système avec des tâches en arrière-plan.

Conditions pour les tâches en arrière-plan

Vous pouvez contrôler quand la tâche en arrière-plan s’exécute, même après son déclenchement, en ajoutant une condition. Une fois déclenchée, une tâche en arrière-plan ne s’exécute pas tant que toutes ses conditions ne sont pas remplies. Les conditions suivantes (représentées par l’énumération SystemConditionType ) peuvent être utilisées.

Nom de la condition Description
InternetAvailable Internet doit être disponible.
InternetNotAvailable Internet doit être indisponible.
SessionConnected La session doit être connectée.
SessionDisconnected La session doit être déconnectée.
UserNotPresent L’utilisateur doit être absent.
UserPresent L’utilisateur doit être présent.

Ajoutez la condition InternetAvailable à votre tâche en arrière-plan BackgroundTaskBuilder.AddCondition pour retarder le déclenchement de la tâche en arrière-plan jusqu’à ce que la pile réseau s’exécute. Cette condition enregistre la puissance, car la tâche en arrière-plan n’est pas exécutée tant que le réseau n’est pas disponible. Cette condition ne fournit pas d’activation en temps réel.

Si votre tâche en arrière-plan nécessite une connectivité réseau, définissez IsNetworkRequested pour vous assurer que le réseau reste à jour pendant l’exécution de la tâche en arrière-plan. Cela indique à l’infrastructure de tâches en arrière-plan qu’elle doit maintenir le réseau actif pendant l’exécution de la tâche, même si le périphérique est passé en mode de veille connectée. Si votre tâche en arrière-plan ne définit pas IsNetworkRequested, votre tâche en arrière-plan ne pourra pas accéder au réseau en mode Veille connectée (par exemple, lorsque l’écran d’un téléphone est désactivé.) Pour plus d’informations sur les conditions de tâche en arrière-plan, consultez Définir des conditions pour exécuter une tâche en arrière-plan.

Exigences du manifeste d’application

Avant que votre application puisse inscrire une tâche en arrière-plan qui s’exécute hors processus, elle doit être déclarée dans le manifeste de l’application. Les tâches en arrière-plan qui s’exécutent dans le même processus que leur application hôte n’ont pas besoin d’être déclarées dans le manifeste de l’application. Pour plus d’informations, consultez Déclarer des tâches en arrière-plan dans le manifeste de l’application.

Tâches en arrière-plan

Les déclencheurs en temps réel suivants peuvent être utilisés pour exécuter du code personnalisé léger en arrière-plan :

Déclencheur en temps réel Description
Canal de contrôle Les tâches en arrière-plan peuvent maintenir une connexion active et recevoir des messages sur le canal de contrôle à l’aide de ControlChannelTrigger. Si votre application écoute un socket, vous pouvez utiliser socket Broker au lieu de ControlChannelTrigger. Pour plus d’informations sur l’utilisation de Socket Broker, consultez SocketActivityTrigger. ControlChannelTrigger n’est pas pris en charge sur Windows Phone.
Minuteur Les tâches en arrière-plan peuvent s’exécuter aussi fréquemment que toutes les 15 minutes, et elles peuvent être définies pour s’exécuter à un moment donné à l’aide de TimeTrigger. Pour plus d’informations, consultez Exécuter une tâche en arrière-plan sur un minuteur.
Push Notification Les tâches en arrière-plan répondent à PushNotificationTrigger pour recevoir des notifications Push brutes.

Remarque  

Les applications Windows universelles doivent appeler RequestAccessAsync avant d’inscrire l’un des types de déclencheurs en arrière-plan.

Pour vous assurer que votre application Windows universelle continue de s’exécuter correctement après avoir publié une mise à jour, appelez RemoveAccess, puis appelez RequestAccessAsync lorsque votre application démarre après avoir été mise à jour. Pour plus d’informations, consultez Instructions pour les tâches en arrière-plan.

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.

Déclencheurs d’événements système

L’énumération SystemTriggerType représente les déclencheurs d’événements système suivants :

Nom du déclencheur Description
UserPresent La tâche en arrière-plan est déclenchée lorsque l’utilisateur devient présent.
UserAway La tâche en arrière-plan est déclenchée lorsque l’utilisateur devient absent.
ControlChannelReset La tâche en arrière-plan est déclenchée lorsqu’un canal de contrôle est réinitialisé.
SessionConnected La tâche en arrière-plan est déclenchée lorsque la session est connectée.

  L’événement système suivant déclenche un signal lorsque l’utilisateur a déplacé une application sur ou hors de l’écran de verrouillage.

Nom du déclencheur Description
LockScreenApplicationAdded Une vignette d’application est ajoutée à l’écran de verrouillage.
LockScreenApplicationRemoved Une vignette d’application est supprimée de l’écran de verrouillage.

 

Contraintes de ressources de tâche en arrière-plan

Les tâches en arrière-plan sont légères. Maintenir l’exécution en arrière-plan au minimum garantit la meilleure expérience utilisateur avec les applications de premier plan et la durée de vie de la batterie. Cela est appliqué en appliquant des contraintes de ressources aux tâches en arrière-plan.

Les tâches en arrière-plan sont limitées à 30 secondes d’utilisation de l’horloge murale.

Contraintes de mémoire

En raison des contraintes de ressources pour les appareils à mémoire faible, les tâches en arrière-plan peuvent avoir une limite de mémoire qui détermine la quantité maximale de mémoire que la tâche en arrière-plan peut utiliser. Si votre tâche en arrière-plan tente une opération qui dépasse cette limite, l’opération échoue et peut générer une exception hors mémoire, que la tâche peut gérer. Si la tâche ne gère pas l’exception hors mémoire ou si la nature de l’opération tentée est telle qu’une exception hors mémoire n’a pas été générée, la tâche est arrêtée immédiatement.

Vous pouvez utiliser les API MemoryManager pour interroger l’utilisation et la limite actuelles de la mémoire afin de découvrir votre limite (le cas échéant) et de surveiller l’utilisation continue de la mémoire de votre tâche en arrière-plan.

Limite par appareil pour les applications avec des tâches en arrière-plan pour les appareils à mémoire faible

Sur les appareils à mémoire limitée, il existe une limite au nombre d’applications qui peuvent être installées sur un appareil et utiliser des tâches en arrière-plan à tout moment. Si ce nombre est dépassé, l’appel à RequestAccessAsync, requis pour inscrire toutes les tâches en arrière-plan, échoue.

Économiseur de batterie

Sauf si vous exemptez votre application afin qu’elle puisse toujours exécuter des tâches en arrière-plan et recevoir des notifications Push lorsque l’économiseur de batterie est activé, la fonctionnalité Économiseur de batterie, lorsqu’elle est activée, empêche l’exécution des tâches en arrière-plan lorsque l’appareil n’est pas connecté à l’alimentation externe et que la batterie est inférieure à une quantité spécifiée d’alimentation restante. Cela ne vous empêchera pas d’inscrire des tâches en arrière-plan.

Toutefois, pour les applications d’entreprise et les applications qui ne seront pas publiées dans le Microsoft Store, consultez Exécuter en arrière-plan indéfiniment pour apprendre à utiliser des fonctionnalités pour exécuter une tâche en arrière-plan ou une session d’exécution étendue en arrière-plan indéfiniment.

Garanties des ressources de tâche en arrière-plan pour la communication en temps réel

Pour empêcher les quotas de ressources d’interférer avec les fonctionnalités de communication en temps réel, les tâches en arrière-plan utilisant ControlChannelTrigger et PushNotificationTrigger reçoivent des quotas de ressources processeur garantis pour chaque tâche en cours d’exécution. Les quotas de ressources sont comme indiqué ci-dessus et restent constants pour ces tâches en arrière-plan.

Votre application n’a rien à faire différemment pour obtenir les quotas de ressources garantis pour les tâches en arrière-plan ControlChannelTrigger et PushNotificationTrigger. Le système traite toujours ces tâches en arrière-plan critiques.

Déclencheur de maintenance

Les tâches de maintenance s’exécutent uniquement lorsque l’appareil est branché à l’alimentation ac. Pour plus d’informations, consultez Utiliser un déclencheur de maintenance.

Tâches en arrière-plan pour les capteurs et les appareils

Votre application peut accéder aux capteurs et périphériques à partir d’une tâche en arrière-plan avec la classe DeviceUseTrigger. Vous pouvez utiliser ce déclencheur pour les opérations de longue durée, telles que la synchronisation ou la surveillance des données. Contrairement aux tâches pour les événements système, une tâche DeviceUseTrigger ne peut être déclenchée que lorsque votre application s’exécute au premier plan et qu’aucune condition ne peut être définie dessus.

Important

DeviceUseTrigger et DeviceServicingTrigger ne peuvent pas être utilisés avec des tâches en arrière-plan in-process.

Certaines opérations critiques sur les appareils, telles que les mises à jour de microprogramme longues, ne peuvent pas être effectuées avec DeviceUseTrigger. Ces opérations peuvent être effectuées uniquement sur le PC, et uniquement par une application privilégiée qui utilise DeviceServicingTrigger. Une application privilégiée est une application que le fabricant de l’appareil a autorisée à effectuer ces opérations. Les métadonnées de l’appareil sont utilisées pour spécifier l’application, le cas échéant, qui a été désignée comme application privilégiée pour un appareil. Pour plus d’informations, consultez Synchronisation et mise à jour des appareils du Microsoft Store

Gestion des tâches en arrière-plan

Les tâches en arrière-plan peuvent signaler la progression, l’achèvement et l’annulation à votre application à l’aide d’événements et de stockage local. Votre application peut également intercepter les exceptions levées par une tâche en arrière-plan et gérer l’inscription des tâches en arrière-plan pendant les mises à jour de l’application. Pour plus d’informations, consultez :

Gérer une tâche en arrière-plan annulée
Surveiller la progression et l’achèvement des tâches en arrière-plan

Vérifiez l’inscription de votre tâche en arrière-plan pendant le lancement de l’application. Vérifiez que les tâches en arrière-plan non groupées de votre application sont présentes dans BackgroundTaskBuilder.AllTasks. Réinscrivez ceux qui ne sont pas présents. Annulez l’inscription des tâches qui ne sont plus nécessaires. Cela garantit que toutes les inscriptions de tâches en arrière-plan sont à jour chaque fois que l’application est lancée.

Conseils conceptuels pour le multitâche dans Windows 10

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