Prendre en charge votre application avec des tâches en arrière-planSupport your app with background tasks

Les rubriques de cette section expliquent comment exécuter du code léger en arrière-plan, en réponse à des déclencheurs.The topics in this section show you how to make lightweight code run in the background in response to triggers. Vous pouvez utiliser les tâches en arrière-plan pour fournir des fonctionnalités lorsque votre application est suspendue ou n’est pas en cours d’exécution.You can use background tasks to provide functionality when your app is suspended or not running. Les tâches en arrière-plan sont également utiles pour les applications de communication en temps réel (VoIP, messagerie électronique et messagerie instantanée, par exemple).You can also use background tasks for real-time communication apps like VOIP, mail, and IM.

Lecture de contenu multimédia en arrière-planPlaying media in the background

À partir de Windows 10, version 1607, il est beaucoup plus facile de lire du contenu audio en arrière-plan.Starting in Windows 10, version 1607, playing audio in the background is much easier. Voir Lire du contenu multimédia en arrière-plan pour obtenir plus d’informations.See Play media in the background for more information.

Tâches en arrière-plan in-process et hors processusIn-process and out-of-process background tasks

Il existe deux approches pour implémenter des tâches en arrière-plan :There are two approaches to implementing background tasks:

  • In-process : l’application et son processus en arrière-plan s’exécutent dans le même processusIn-process: the app and its background process run in the same process
  • Out-of-process : l’application et le processus en arrière-plan s’exécutent dans des processus distincts.Out-of-process: the app and the background process run in separate processes.

L’approche in-process a été introduite dans Windows 10 version 1607 pour simplifier l’écriture des tâches en arrière-plan.In-process background support was introduced in Windows 10, version 1607, to simplify writing background tasks. Toutefois, vous pouvez toujours écrire des tâches en arrière-plan hors processus.But you can still write out-of-process background tasks. Consultez la rubrique Recommandations en matière de tâches en arrière-plan pour savoir quand utiliser une approche hors processus ou intra-processus pour écrire une tâche en arrière-plan.See Guidelines for background tasks for recommendations on when to write an in-process versus out-of-process background task.

Les tâches en arrière-plan out-of-process sont plus résilientes, car le processus en arrière-plan ne peut pas mettre en place votre processus d’application en cas de problème.Out-of-process background tasks are more resilient because the background process can't bring down your app process if something goes wrong. Toutefois, la résilience se fait 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.But the resiliency comes at the price of greater complexity to manage the cross-process communication between the app and the background task.

Les tâches en arrière-plan out-of-process sont implémentées en tant que classes légères qui implémentent l’interface IBackgroundTask que le système d’exploitation exécute dans un processus séparé (backgroundtaskhost.exe).Out-of-process background tasks are implemented as lightweight classes that implement the IBackgroundTask interface that the OS runs in a separate process (backgroundtaskhost.exe). Inscrire une tâche en arrière-plan à l’aide de la classe BackgroundTaskBuilder .Register a background task by using the BackgroundTaskBuilder class. Le nom de la classe est utilisé pour spécifier le point d’entrée lors de l’inscription de la tâche en arrière-plan.The class name is used to specify the entry point when you registering the background task.

Dans Windows 10 version 1607, vous pouvez activer l’activité en arrière-plan sans avoir à créer de tâche en arrière-plan.In Windows 10, version 1607, you can enable background activity without creating a background task. Vous pouvez à la place exécuter votre code en arrière-plan directement dans le processus de l’application de premier plan.You can instead run your background code directly inside the foreground application's process.

Pour savoir comment créer des tâches en arrière-plan in-process, consultez la rubrique Créer et inscrire une tâche en arrière-plan in-process.To get started quickly with in-process background tasks, see Create and register an in-process background task.

Pour savoir comment créer des tâches en arrière-plan hors processus, consultez la rubrique Créer et inscrire une tâche en arrière-plan hors processus.To get started quickly with out-of-process background tasks, see Create and register an out-of-process background task.

Conseil

 À partir de Windows 10, il n’est plus nécessaire de placer une application sur l’écran de verrouillage pour qu’elle inscrive une tâche en arrière-plan. Starting with Windows 10, you no longer need to place an app on the lock screen as a prerequisite for registering a background task for it.

Tâches en arrière-plan pour événements systèmeBackground tasks for system events

Votre application peut répondre à des événements générés par le système en inscrivant une tâche en arrière-plan à l’aide de la classe SystemTrigger.Your app can respond to system-generated events by registering a background task with the SystemTrigger class. Une application peut utiliser au choix l’un des déclencheurs d’événements système suivants (définis dans SystemTriggerType)An app can use any of the following system event triggers (defined in SystemTriggerType)

Nom du déclencheurTrigger name DescriptionDescription
InternetAvailableInternetAvailable Internet devient disponible.The Internet becomes available.
NetworkStateChangeNetworkStateChange Une modification, liée au coût ou à la connectivité, par exemple, se produit sur le réseau.A network change such as a change in cost or connectivity occurs.
OnlineIdConnectedStateChangeOnlineIdConnectedStateChange ID en ligne associé aux modifications du compte.Online ID associated with the account changes.
SmsReceivedSmsReceived Un nouveau message SMS est reçu par un appareil mobile à haut débit installé.A new SMS message is received by an installed mobile broadband device.
TimeZoneChangeTimeZoneChange Le fuseau horaire est modifié sur l’appareil (par exemple, lorsque le système règle l’horloge pour le passage à l’heure d’été).The time zone changes on the device (for example, when the system adjusts the clock for daylight saving time).

Pour plus d’informations, voir Répondre aux événements système avec des tâches en arrière-plan.For more info see Respond to system events with background tasks.

Conditions pour tâches en arrière-planConditions for background tasks

Vous pouvez contrôler à quel moment la tâche en arrière-plan est exécutée, même après l’avoir déclenchée, en ajoutant une condition.You can control when the background task runs, even after it is triggered, by adding a condition. Une fois déclenchée, la tâche en arrière-plan ne sera pas exécutée tant que toutes ses conditions ne seront pas remplies.Once triggered, a background task will not run until all of its conditions are met. Les conditions suivantes (représentées par l’énumération SystemConditionType) peuvent être appliquées.The following conditions (represented by the SystemConditionType enumeration) can be used.

Nom de la conditionCondition name DescriptionDescription
InternetAvailableInternetAvailable Internet doit être accessible.The Internet must be available.
InternetNotAvailableInternetNotAvailable Internet ne doit pas être accessible.The Internet must be unavailable.
SessionConnectedSessionConnected La session doit être connectée.The session must be connected.
SessionDisconnectedSessionDisconnected La session doit être déconnectée.The session must be disconnected.
UserNotPresentUserNotPresent L’utilisateur doit être absent.The user must be away.
UserPresentUserPresent L’utilisateur doit être présent.The user must be present.

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.Add the InternetAvailable condition to your background task BackgroundTaskBuilder.AddCondition to delay triggering the background task until the network stack is running. Cette condition économise l’énergie, car la tâche en arrière-plan ne s’exécute pas tant que le réseau n’est pas disponible.This condition saves power because the background task won't execute until the network is available. Cette condition ne fournit pas d’activation en temps réel.This condition does not provide real-time activation.

Si votre tâche en arrière-plan requiert une connectivité réseau, définissez IsNetworkRequested pour vous assurer que le réseau reste opérationnel pendant l’exécution de la tâche en arrière-plan.If your background task requires network connectivity, set IsNetworkRequested to ensure that the network stays up while the background task runs. 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.This tells the background task infrastructure to keep the network up while the task is executing, even if the device has entered Connected Standby mode. Si votre tâche en arrière-plan ne définit pas IsNetworkRequested, votre tâche en arrière-plan ne sera pas en mesure d’accéder au réseau en mode veille connectée (par exemple, lorsque l’écran d’un téléphone est désactivé).  If your background task does not set IsNetworkRequested, then your background task will not be able to access the network when in Connected Standby mode (for example, when a phone's screen is turned off.)   Pour plus d’informations sur les conditions des tâches en arrière-plan, consultez définir les conditions d’exécution d’une tâche en arrière-plan.For more info about background task conditions, see Set conditions for running a background task.

Exigences du manifeste d’applicationApplication manifest requirements

Pour que votre application puisse inscrire une tâche en arrière-plan qui s’exécute hors processus, vous devez au préalable la déclarer dans le manifeste de l’application.Before your app can successfully register a background task that runs out-of-process, it must be declared in the application manifest. Il n’est pas nécessaire de déclarer 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.Background tasks that run in the same process as their host app do not need to be declared in the application manifest. Pour plus d’informations, voir Déclarer des tâches en arrière-plan dans le manifeste de l’application.For more info see Declare background tasks in the application manifest.

Tâches en arrière-planBackground tasks

Les déclencheurs en temps réel suivants peuvent être utilisés pour exécuter du code léger personnalisé en arrière-plan :The following real-time triggers can be used to run lightweight custom code in the background:

Déclencheur en temps réelReal-time trigger DescriptionDescription
Canal de contrôleControl Channel Les tâches en arrière-plan peuvent conserver une connexion active et recevoir des messages sur le canal de contrôle en utilisant l’objet ControlChannelTrigger.Background tasks can keep a connection alive, and receive messages on the control channel, by using the ControlChannelTrigger. Si votre application est à l’écoute d’un socket, vous pouvez utiliser le Broker de socket à la place du ControlChannelTrigger.If your app is listening to a socket, you can use the Socket Broker instead of the ControlChannelTrigger. Pour plus d’informations sur l’utilisation du Broker de socket, voir SocketActivityTrigger.For more details on using the Socket Broker, see SocketActivityTrigger. La classe ControlChannelTrigger n’est pas prise en charge sur Windows Phone.The ControlChannelTrigger is not supported on Windows Phone.
MinuteurTimer Vous pouvez exécuter des tâches en arrière-plan toutes les 15 minutes et programmer leur exécution à l’aide du TimeTrigger.Background tasks can run as frequently as every 15 minutes, and they can be set to run at a certain time by using the TimeTrigger. Pour plus d’informations, voir Exécuter une tâche en arrière-plan en fonction d’un minuteur.For more info see Run a background task on a timer.
Notification pushPush Notification Les tâches en arrière-plan répondent à l’objet PushNotificationTrigger pour recevoir des notifications Push brutes.Background tasks respond to the PushNotificationTrigger to receive raw push notifications.

RemarqueNote  

Les applications Windows universelles doivent appeler RequestAccessAsync avant d’inscrire l’un des types de déclencheurs d’arrière-plan.Universal Windows apps must call RequestAccessAsync before registering any of the background trigger types.

Pour vous assurer que votre application Windows universelle continue à s’exécuter correctement après la publication d’une mise à jour, appelez RemoveAccess , puis appelez RequestAccessAsync lorsque votre application est lancée après sa mise à jour.To ensure that your Universal Windows app continues to run properly after you release an update, call RemoveAccess and then call RequestAccessAsync when your app launches after being updated. Pour plus d’informations, voir Recommandations en matière de tâches en arrière-plan.For more information, see Guidelines for background tasks.

Limites du nombre d’instances de déclencheur : Il existe des limites quant au nombre d’instances d’un déclencheur qu’une application peut inscrire.Limits on the number of trigger instances: There are limits to how many instances of some triggers an app can register. Une application ne peut inscrire ApplicationTrigger, MediaProcessingTrigger et DeviceUseTrigger qu’une seule fois par instance de l’application.An app can only register ApplicationTrigger, MediaProcessingTrigger and DeviceUseTrigger once per instance of the app. Si une application dépasse cette limite, l’inscription lève une exception.If an app goes over this limit, registration will throw an exception.

Déclencheurs d’événements systèmeSystem event triggers

L’énumération SystemTriggerType représente les déclencheurs d’événements système suivants :The SystemTriggerType enumeration represents the following system event triggers:

Nom du déclencheurTrigger name DescriptionDescription
UserPresentUserPresent La tâche en arrière-plan est déclenchée dès que l’utilisateur est présent.The background task is triggered when the user becomes present.
UserAwayUserAway La tâche en arrière-plan est déclenchée dès que l’utilisateur est absent.The background task is triggered when the user becomes absent.
ControlChannelResetControlChannelReset La tâche en arrière-plan est déclenchée lorsqu’un canal de contrôle est réinitialisé.The background task is triggered when a control channel is reset.
SessionConnectedSessionConnected La tâche en arrière-plan est déclenchée dès que la session est connectée.The background task is triggered when the session is connected.

  Les déclencheurs d’événements système suivants permettent de savoir lorsque l’utilisateur active ou désactive une application sur l’écran de verrouillage.The following system event triggers signal when the user has moved an app on or off the lock screen.

Nom du déclencheurTrigger name DescriptionDescription
LockScreenApplicationAddedLockScreenApplicationAdded Une vignette d’application est ajoutée à l’écran de verrouillage.An app tile is added to the lock screen.
LockScreenApplicationRemovedLockScreenApplicationRemoved Une vignette d’application est supprimée de l’écran de verrouillage.An app tile is removed from the lock screen.

 

Contraintes de ressource des tâches en arrière-planBackground task resource constraints

Les tâches en arrière-plan sont légères.Background tasks are lightweight. Le fait de limiter autant que possible l’exécution en arrière-plan garantit une expérience utilisateur optimale pour les applications de premier plan et une meilleure autonomie de la batterie.Keeping background execution to a minimum ensures the best user experience with foreground apps and battery life. Pour cela, il convient d’appliquer des contraintes de ressource aux tâches en arrière-plan.This is enforced by applying resource constraints to background tasks.

Les tâches en arrière-plan sont limitées à 30 secondes de l’utilisation de l’horloge.Background tasks are limited to 30 seconds of wall-clock usage.

Contraintes de mémoireMemory constraints

En raison des contraintes de ressources des appareils disposant de peu de mémoire, 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.Due to the resource constraints for low-memory devices, background tasks may have a memory limit that determines the maximum amount of memory the background task can use. Si votre tâche en arrière-plan tente d’exécuter une opération qui dépasse cette limite, l’opération échoue et peut générer une exception de mémoire insuffisante que la tâche pourra gérer.If your background task attempts an operation that would exceed this limit, the operation will fail and may generate an out-of-memory exception--which the task can handle. Si la tâche ne parvient pas à gérer cette exception, ou si la nature de l’opération est telle qu’elle n’a pas généré d’exception de mémoire insuffisante, la tâche sera immédiatement arrêtée.If the task does not handle the out-of-memory exception, or the nature of the attempted operation is such that an out-of-memory exception was not generated, then the task will be terminated immediately.

Vous pouvez utiliser les API MemoryManager pour connaître le niveau d’utilisation actuel et les limites de la mémoire afin d’en déterminer le plafond (le cas échéant) et de surveiller l'utilisation de la mémoire de votre tâche en arrière-plan.You can use the MemoryManager APIs to query your current memory usage and limit in order to discover your cap (if any), and to monitor your background task's ongoing memory usage.

Limite par appareil pour les applications avec des tâches en arrière-plan pour les appareils dont la mémoire est insuffisantePer-device limit for apps with background tasks for low-memory devices

Sur les appareils à faible capacité de mémoire, le nombre d’applications pouvant être installées et l’utilisation de tâches en arrière-plan à tout moment sont limités.On memory-constrained devices, there is a limit to the number of apps that can be installed on a device and use background tasks at any given time. En cas de dépassement, l’appel à RequestAccessAsync, qui est requis pour inscrire toutes les tâches en arrière-plan, échoue.If this number is exceeded, the call to RequestAccessAsync, which is required to register all background tasks, will fail.

Économiseur de batterieBattery Saver

Sauf si vous appliquez une exception à votre application pour qu’elle puisse continuer à 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 de tâches en arrière-plan quand l’appareil n’est pas connecté à une source d’énergie externe et que la batterie passe sous une quantité d’énergie restante spécifiée.Unless you exempt your app so that it can still run background tasks and receive push notifications when Battery Saver is on, the Battery Saver feature, when enabled, will prevent background tasks from running when the device is not connected to external power and the battery goes below a specified amount of power remaining. Cela ne vous empêche pas d’inscrire des tâches en arrière-plan.This will not prevent you from registering background tasks.

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 savoir comment utiliser les 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.However, for enterprise apps, and apps that will not be published in the Microsoft Store, see Run in the background indefinitely to learn how to use a capabilities to run a background task or extended execution session in the background indefinitely.

Garanties de ressources des tâches en arrière-plan pour la communication en temps réelBackground task resource guarantees for real-time communication

Afin que les quotas de ressources n’interfèrent pas avec la fonctionnalité de communication en temps réel, les tâches en arrière-plan qui utilisent le ControlChannelTrigger et le PushNotificationTrigger bénéficient de quotas de ressources de processeur garantis pour chaque tâche en cours d’exécution.To prevent resource quotas from interfering with real-time communication functionality, background tasks using the ControlChannelTrigger and PushNotificationTrigger receive guaranteed CPU resource quotas for every running task. Les quotas de ressources sont comme mentionné plus haut et demeurent inchangés pour ces tâches en arrière-plan.The resource quotas are as mentioned above, and remain constant for these background tasks.

Il n’est pas nécessaire que votre application soit différente pour obtenir les quotas de ressources garantis pour les tâches en arrière-plan ControlChannelTrigger et PushNotificationTrigger .Your app doesn't have to do anything differently to get the guaranteed resource quotas for ControlChannelTrigger and PushNotificationTrigger background tasks. Le système les traite toujours en tant que tâches en arrière-plan critiques.The system always treats these as critical background tasks.

Déclencheur de maintenanceMaintenance trigger

Les tâches de maintenance s’exécutent uniquement lorsque l’appareil est branché sur le secteur.Maintenance tasks only run when the device is plugged in to AC power. Pour plus d’informations, voir Utiliser un déclencheur de maintenance.For more info see Use a maintenance trigger.

Tâches en arrière-plan pour les capteurs et les périphériquesBackground tasks for sensors and devices

Votre application peut accéder aux capteurs et aux périphériques à partir d’une tâche en arrière-plan avec la classe DeviceUseTrigger .Your app can access sensors and peripheral devices from a background task with the DeviceUseTrigger class. Vous pouvez utiliser ce déclencheur pour des opérations longues telles que la synchronisation ou la surveillance de données.You can use this trigger for long-running operations such as data synchronization or monitoring. Contrairement aux tâches associées aux événements système, une tâche DeviceUseTrigger peut être déclenchée uniquement lorsque votre application s’exécute au premier plan et ne prend en charge aucune condition.Unlike tasks for system events, a DeviceUseTrigger task can only be triggered while your app is running in the foreground and no conditions can be set on it.

Important

Les déclencheurs DeviceUseTrigger et DeviceServicingTrigger ne peuvent pas être utilisés avec des tâches en arrière-plan in-process.The DeviceUseTrigger and DeviceServicingTrigger cannot be used with in-process background tasks.

Certaines opérations d’appareil critiques, telles que les mises à jour de microprogrammes longues, ne peuvent pas être effectuées avec le DeviceUseTrigger.Some critical device operations, such as long running firmware updates, cannot be performed with the DeviceUseTrigger. De telles opérations ne peuvent être effectuées que sur le PC, et uniquement par une application privilégiée utilisant le DeviceServicingTrigger.Such operations can be performed only on the PC, and only by a privileged app that uses the DeviceServicingTrigger. Une application privilégiée est une application autorisée par le fabricant de l’appareil à effectuer ces opérations.A privileged app is an app that the device's manufacturer has authorized to perform those operations. Les métadonnées de périphérique permettent de spécifier l’application définie, le cas échéant, comme application privilégiée d’un appareil.Device metadata is used to specify which app, if any, has been designated as the privileged app for a device. Pour plus d’informations, consultez synchronisation et mise à jour des appareils pour Microsoft Store applications pour appareilsFor more info, see Device sync and update for Microsoft Store device apps

Gestion des tâches en arrière-planManaging background tasks

Les tâches en arrière-plan peuvent signaler leur progression, leur annulation et leur achèvement à votre application par le biais d’événements et du stockage local.Background tasks can report progress, completion, and cancellation to your app using events and local storage. 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 lors des mises à jour des applications.Your app can also catch exceptions thrown by a background task, and manage background task registration during app updates. Pour plus d’informations, consultez :For more info see:

Gérer une tâche en arrière-plan annuléeHandle a cancelled background task
Surveiller la progression et l’achèvement des tâches en arrière-planMonitor background task progress and completion

Vérifiez l’inscription de vos tâches en arrière-plan pendant le lancement de l’application.Check your background task registration during app launch. Assurez-vous que les tâches d’arrière-plan non groupées de votre application sont présentes dans BackgroundTaskBuilder. AllTasks.Ensure that your app's ungrouped background tasks are present in BackgroundTaskBuilder.AllTasks. Enregistrez à nouveau ceux qui ne sont pas présents.Re-register the ones that are not present. Annulez l’inscription des tâches qui ne sont plus nécessaires.Unregister any tasks that are no longer needed. Cela garantit que toutes les inscriptions de tâches en arrière-plan sont à jour chaque fois que l’application est lancée.This ensures that all background tasks registrations are up-to-date every time the app is launched.

Recommandations conceptuelles pour le multitâche sous Windows 10Conceptual guidance for multitasking in Windows 10

Recommandations connexes en matière de tâches en arrière-planRelated background task guidance