Recommandations en matière de tâches en arrière-planGuidelines for background tasks

Assurez-vous que votre application répond aux exigences relatives à l’exécution de tâches en arrière-plan.Ensure your app meets the requirements for running background tasks.

Recommandations en matière de tâches en arrière-planBackground task guidance

Tenez compte des recommandations suivantes au moment de développer une tâche en arrière-plan et avant de publier votre application.Consider the following guidance when developing your background task, and before publishing your app.

Si vous utilisez une tâche en arrière-plan pour lire du contenu multimédia en arrière-plan, consultez Lire du contenu multimédia en arrière-plan. Les informations fournies sur les améliorations apportées dans Windows10 version1607 vous simplifieront la vie.If you use a background task to play media in the background, see Play media in the background for information about improvements in Windows 10, version 1607, that make it much easier.

Tâches en arrière-plan hors processus ou in-process: Windows10 version1607 propose 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 au premier plan.In-process versus out-of-process background tasks: Windows 10, version 1607, introduced in-process background tasks which allows you to run background code in the same process as your foreground app. Pour déterminer s’il est préférable de disposer de tâches en arrière-plan in-process ou hors processus, prenez en compte les facteurs suivants:Consider the following factors when deciding whether to have in-process vs. out-of-process background tasks:

FacteurConsideration ImpactImpact
RésilienceResilience Si votre processus en arrière-plan s’exécute dans un autre processus, un blocage dans votre processus en arrière-plan ne bloque pas votre application au premier plan.If your background process is running in another process, a crash in your background process won't take down your foreground application. De plus, 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 durée d’exécution.Also, background activity can be terminated, even within your app, if it runs past execution time limits. Séparer des tâches en arrière-plan dans une tâche distincte de l’application au premier plan peut être plus judicieux lorsque les processus au premier plan et en arrière-plan n’ont pas à communiquer entre eux (l’un des principaux avantages des tâches en arrière-plan in-process est qu’elles évitent toute communication entre les processus).Separating background work into a task separate from the foreground app may be a better choice when it isn't necessary for the foreground and background processes to communicate with each other (since one of the main advantages of in-process background tasks are that they remove the need for inter-process communication).
SimplicitéSimplicity Les tâches en arrière-plan in-process ne nécessitent aucune communication entre les processus et sont moins complexes à écrire.In-process background tasks don't require cross-process communication and are less complex to write.
Déclencheurs disponiblesAvailable triggers Les tâches en arrière-plan in-process ne prennent pas en charge les déclencheurs suivants: DeviceUseTrigger, DeviceServicingTrigger et IoTStartupTask.In-process background tasks don't support the following triggers: DeviceUseTrigger, DeviceServicingTrigger and IoTStartupTask.
VoIPVoIP 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 dans votre application.In-process background tasks don't support activating a VoIP background task within your application.

Le nombre d’instances de déclencheur: des limites régissent le nombre d’instances de certains déclencheurs 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 peut inscrire ApplicationTrigger, MediaProcessingTrigger et DeviceUseTrigger 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.

Quotas de processeur: les tâches en arrière-plan sont limitées par la quantité de temps d’utilisation de l’horloge en fonction de leur type de déclencheur.CPU quotas: Background tasks are limited by the amount of wall-clock usage time they get based on trigger type. La plupart des déclencheurs sont limités à 30secondes d’utilisation de l’horloge, mais certains ont une capacité d’exécution pouvant atteindre 10minutes pour exécuter des tâches intensives.Most triggers are limited to 30 seconds of wall-clock usage, while some have the ability to run up to 10 minutes in order to complete intensive tasks. Les tâches en arrière-plan doivent être légères pour préserver l’autonomie de la batterie et assurer une meilleure expérience utilisateur pour les applications de premier plan.Background tasks should be lightweight to save battery life and provide a better user experience for foreground apps. Pour plus d’informations sur les contraintes de ressource appliquées aux tâches en arrière-plan, consultez Prendre en charge votre application avec des tâches en arrière-plan.See Support your app with background tasks for the resource constraints applied to background tasks.

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.Manage background tasks: Your app should get a list of registered background tasks, register for progress and completion handlers, and handle those events appropriately. Vos classes de tâches en arrière-plan doivent signaler la progression, l’annulation et l’achèvement des tâches.Your background task classes should report progress, cancellation, and completion. 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.For more info see Handle a cancelled background task, and Monitor background task progress and completion.

Utilisez BackgroundTaskDeferral: si votre classe de tâches en arrière-plan exécute du code asynchrone, veillez à utiliser des reports.Use BackgroundTaskDeferral: If your background task class runs asynchronous code, make sure to use deferrals. Sinon, votre tâche en arrière-plan peut se terminer prématurément lorsque la méthode Run (ou la méthode OnBackgroundActivated dans le cas de tâches en arrière-plan in-process) est appelée.Otherwise your background task may be terminated prematurely when the Run method (or OnBackgroundActivated method in the case of in-process background tasks). Pour plus d’informations, consultez Créer et inscrire une tâche en arrière-plan hors processus.For more information, see Create and register an out-of-process background task.

L’autre solution consiste à demander un report et à utiliser async/await pour exécuter des appels de méthode asynchrone.Alternatively, request one deferral, and use async/await to complete asynchronous method calls. Fermez le report après les appels de la méthode await.Close the deferral after the await method calls.

Mettre à jour le manifeste de l’application: pour les tâches en arrière-plan qui s’exécutent hors processus, déclarez chaque tâche en arrière-plan dans le manifeste de l’application, ainsi que le type de déclencheur avec lequel elle est utilisée.Update the app manifest: For background tasks that run out-of-process, declare each background task in the application manifest, along with the type of triggers it is used with. Sinon, votre application ne pourra pas inscrire la tâche en arrière-plan lors de l’exécution.Otherwise your app will not be able to register the background task at runtime.

Si vous avez plusieurs tâches en arrière-plan, examinez si elles doivent s’exécuter dans le même processus hôte ou être réparties dans des processus hôte différents.If you have multiple background tasks, consider whether they should run in the same host process or be separated into different host processes. Placez-les dans des processus hôte distincts si vous craignez que l'échec d'une seule tâche en une arrière-plan entraîne l'interruption des autres tâches en arrière-plan.Put them in separate host processes if you are concerned that a failure in one background task could bring down other background tasks. Utilisez l'entrée Groupe de ressources dans le concepteur de manifeste pour regrouper les tâches en arrière-plan dans des processus hôte différents.Use the Resource group entry in the manifest designer to group background tasks into different host processes.

Pour définir le Groupe de ressources, ouvrez le concepteur Package.appxmanifest, choisissez Déclarationset ajoutez une déclaration Service d’application:To set the Resource group, open the Package.appxmanifest designer, choose Declarations, and add an App Service declaration:

Configuration du groupe de ressources

Consultez la référence du schéma d'application pour plus d’informations sur la configuration du groupe de ressources.See the application schema reference for more information about the resource group setting.

Les tâches en arrière-plan qui s’exécutent dans le même processus que l’application au premier plan n’ont pas à se déclarer dans le manifeste de l’application.Background tasks that run in the same process as the foreground app do not need to declare themselves in the application manifest. Pour plus d’informations sur la déclaration hors processus dans le manifeste, consultez Déclarer des tâches en arrière-plan dans le manifeste de l’application.For more information about declaring background tasks that run out-of-process in the manifest, see Declare background tasks in the application manifest.

Préparez les mises à jour de l’application: si votre application doit subir des mises à jour, créez et inscrivez une tâche en arrière-plan ServicingComplete (consultez SystemTriggerType) pour annuler l’inscription des tâches en arrière-plan de la version précédente de l’application et inscrivez les tâches en arrière-plan à la nouvelle version.Prepare for app updates: If your app will be updated, create and register a ServicingComplete background task (see SystemTriggerType) to unregister background tasks for the previous version of the app, and register the background tasks for the new version. Le moment est également idéal pour effectuer des mises à jour d’application qui peuvent se révéler nécessaires hors du contexte d’exécution au premier plan.This is also an appropriate time to perform app updates that may be necessary outside the context of running in the foreground.

Demander l’exécution des tâches en arrière-plan:Request to execute background tasks:

Important Depuis Windows10, les applications n’ont plus à figurer dans l’écran de verrouillage pour exécuter des tâches en arrière-plan.Important Starting in Windows 10, apps are no longer required to be on the lock screen as a prerequisite to run background tasks.

Les applications de plateforme Windows universelle (UWP) peuvent exécuter tous les types de tâches prises en charge, sans être épinglées à l’écran de verrouillage.Universal Windows Platform (UWP) apps can run all supported task types without being pinned to the lock screen. Toutefois, les applications doivent appeler RequestAccessAsync avant d’inscrire tout type de tâche en arrière-plan.However, apps must call RequestAccessAsync before registering any type of background task. Cette méthode retourne BackgroundAccessStatus.DeniedByUser si l’utilisateur a explicitement refusé des autorisations de tâche en arrière-plan pour votre application dans les paramètres de l’appareil.This method will return BackgroundAccessStatus.DeniedByUser if the user has explicitly denied background task permissions for your app in the device's settings. Pour plus d’informations sur le choix de l’utilisateur autour de l’activité en arrière-plan et l’économiseur de batterie, voir Optimiser l’activité en arrière-plan.For more information on user choice around background activity and Battery Saver, see Optimize Background Activity.

Liste de vérifications relatives aux tâches en arrière-planBackground task checklist

S’applique aux tâches en arrière-plan in-process et hors processusApplies to both in-process and out-of-process background tasks

  • Associez votre tâche en arrière-plan au déclencheur approprié.Associate your background task with the correct trigger.
  • Ajoutez des conditions pour assurer une exécution aboutie de votre tâche en arrière-plan.Add conditions to help ensure your background task runs successfully.
  • Gérez la progression, l’achèvement et l’annulation de la tâche en arrière-plan.Handle background task progress, completion, and cancellation.
  • Réinscrivez vos tâches en arrière-plan pendant le lancement de l’application.Re-register your background tasks during app launch. De cette façon, elles seront inscrites au premier lancement de l’application.This ensures that they are registered the first time the app is launched. Cela 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).It also provides a way to detect whether the user has disabled your app's background execution capabilities (in the event registration fails).
  • Recherchez les erreurs d’inscription de la tâche en arrière-plan.Check for background task registration errors. Le cas échéant, tentez d’inscrire la tâche en arrière-plan une nouvelle fois avec d’autres valeurs de paramètres.If appropriate, attempt to register the background task again with different parameter values.
  • Pour toutes les familles d’appareils, à l’exception des ordinateurs de bureau, les tâches en arrière-plan peuvent être arrêtées en cas de mémoire insuffisante de l’appareil.For all device families except desktop, if the device becomes low on memory, background tasks may be terminated. Si aucune exception de mémoire insuffisante n’est exposée ou si l’application ne la gère pas, la tâche en arrière-plan est alors arrêtée sans avertissement ni déclenchement de l’événement OnCanceled.If an out of memory exception is not surfaced, or the app does not handle it, then the background task will be terminated without warning and without raising the OnCanceled event. Cela permet de garantir l’expérience utilisateur de l’application au premier plan.This helps to ensure the user experience of the app in the foreground. Votre tâche en arrière-plan doit être conçue de manière à gérer ce scénario.Your background task should be designed to handle this scenario.

S’applique uniquement aux tâches en arrière-plan hors processusApplies only to out-of-process background tasks

  • Créez votre tâche en arrière-plan dans un composant WindowsRuntime.Create your background task in a Windows Runtime Component.
  • N’affichez pas l’interface utilisateur hormis les toasts, vignettes et mises à jour de badge de la tâche en arrière-plan.Do not display UI other than toasts, tiles, and badge updates from the background task.
  • Dans la méthode Run, demandez des reports pour chaque appel de méthode asynchrone, puis fermez-les lorsque la méthode est terminée.In the Run method, request deferrals for each asynchronous method call, and close them when the method is done. Vous pouvez également utiliser un report avec async/await.Or, use one deferral with async/await.
  • Utilisez un dispositif de stockage persistant pour partager des données entre la tâche en arrière-plan et l’application.Use persistent storage to share data between the background task and the app.
  • Déclarez chaque tâche en arrière-plan dans le manifeste de l’application, de même que le type de déclencheur avec lequel elle est utilisée.Declare each background task in the application manifest, along with the type of triggers it is used with. Vérifiez que le point d’entrée et les types de déclencheur sont corrects.Make sure the entry point and trigger types are correct.
  • Ne spécifiez aucun élément Executable dans le manifeste sauf si vous utilisez un déclencheur à exécuter dans le même contexte que l’application (comme le déclencheur ControlChannelTrigger).Do not specify an Executable element in the manifest unless you are using a trigger that should be run in the same context as the app (such as the ControlChannelTrigger).

S’applique uniquement aux tâches en arrière-plan in-processApplies only to in-process background tasks

  • Lors de l’annulation d’une tâche, vérifiez que le gestionnaire d’événements BackgroundActivated se ferme avant l’annulation ou la fin du processus.When cancelling a task, ensure that the BackgroundActivated event handler exits before the cancellation occurs or the whole process will be terminated.
  • Écrivez des tâches en arrière-plan de courte durée.Write background tasks that are short-lived. 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.
  • Ne comptez pas sur l’interaction utilisateur dans les tâches en arrière-plan.Do not rely on user interaction in background tasks.