Déclencher une tâche en arrière-plan à partir de votre applicationTrigger a background task from within your app

Découvrez comment utiliser ApplicationTrigger pour activer une tâche en arrière-plan à partir de votre application.Learn how to use the ApplicationTrigger to activate a background task from within your app.

Pour obtenir un exemple de création d’un déclencheur d’application, consultez cet exemple.For an example of how to create an Application trigger, see this example.

Cette rubrique suppose que vous avez une tâche en arrière-plan que vous souhaitez activer à partir de votre application.This topic assumes that you have a background task that you want to activate from your application. Si vous n’avez pas encore de tâche en arrière-plan, il existe un exemple de tâche en arrière-plan sur BackgroundActivity.cs.If you don't already have a background task, there is a sample background task at BackgroundActivity.cs. Ou bien, suivez les étapes décrites dans créer et inscrire une tâche en arrière-plan out-of-process pour en créer une.Or, follow the steps in Create and register an out-of-process background task to create one.

Pourquoi utiliser un déclencheur d’application ?Why use an application trigger

Utilisez un ApplicationTrigger pour exécuter du code dans un processus séparé à partir de l’application de premier plan.Use an ApplicationTrigger to run code in a separate process from the foreground app. Un ApplicationTrigger est approprié si votre application a un travail qui doit être effectué en arrière-plan, même si l’utilisateur ferme l’application de premier plan.An ApplicationTrigger is appropriate if your app has work that needs to be done in the background--even if the user closes the foreground app. Si le travail en arrière-plan doit s’arrêter lorsque l’application est fermée ou être lié à l’état du processus de premier plan, l’exécution étendue doit être utilisée à la place.If background work should halt when the app is closed, or should be tied to the state of the foreground process, then Extended Execution should be used, instead.

Créer un déclencheur d’applicationCreate an application trigger

Créez un nouveau ApplicationTrigger.Create a new ApplicationTrigger. Vous pouvez la stocker dans un champ comme dans l’extrait de code ci-dessous.You could store it in a field as is done in the snippet below. C’est pour des raisons pratiques que nous n’avons pas besoin de créer une nouvelle instance ultérieurement lorsque nous souhaitons signaler le déclencheur.This is for convenience so that we don't have to create a new instance later when we want to signal the trigger. Toutefois, vous pouvez utiliser n’importe quelle instance ApplicationTrigger pour signaler le déclencheur.But you can use any ApplicationTrigger instance to signal the trigger.

// _AppTrigger is an ApplicationTrigger field defined at a scope that will keep it alive
// as long as you need to trigger the background task.
// Or, you could create a new ApplicationTrigger instance and use that when you want to
// trigger the background task.
_AppTrigger = new ApplicationTrigger();
// _AppTrigger is an ApplicationTrigger field defined at a scope that will keep it alive
// as long as you need to trigger the background task.
// Or, you could create a new ApplicationTrigger instance and use that when you want to
// trigger the background task.
Windows::ApplicationModel::Background::ApplicationTrigger _AppTrigger;
// _AppTrigger is an ApplicationTrigger field defined at a scope that will keep it alive
// as long as you need to trigger the background task.
// Or, you could create a new ApplicationTrigger instance and use that when you want to
// trigger the background task.
ApplicationTrigger ^ _AppTrigger = ref new ApplicationTrigger();

(Facultatif) Ajouter une condition(Optional) Add a condition

Vous pouvez créer une condition de tâche en arrière-plan pour contrôler le moment d’exécution de la tâche.You can create a background task condition to control when the task runs. Une condition empêche la tâche en arrière-plan de s’exécuter jusqu’à ce que la condition soit remplie.A condition prevents the background task from running until the condition is met. Pour plus d’informations, consultez définir les conditions d’exécution d’une tâche en arrière-plan.For more information, see Set conditions for running a background task.

Dans cet exemple, la condition est définie sur InternetAvailable afin que, une fois déclenchée, la tâche s’exécute uniquement une fois que l’accès à Internet est disponible.In this example the condition is set to InternetAvailable so that, once triggered, the task only runs once internet access is available. Pour obtenir la liste des conditions possibles, consultez SystemConditionType.For a list of possible conditions, see SystemConditionType.

SystemCondition internetCondition = new SystemCondition(SystemConditionType.InternetAvailable);
Windows::ApplicationModel::Background::SystemCondition internetCondition{
    Windows::ApplicationModel::Background::SystemConditionType::InternetAvailable };
SystemCondition ^ internetCondition = ref new SystemCondition(SystemConditionType::InternetAvailable)

Pour obtenir des informations plus détaillées sur les conditions et types de déclencheurs d’arrière-plan, consultez prise en charge de votre application avec des tâches en arrière-plan.For more in-depth information on conditions and types of background triggers, see Support your app with background tasks.

Appeler RequestAccessAsync()Call RequestAccessAsync()

Avant d’inscrire la tâche d’arrière-plan ApplicationTrigger , appelez RequestAccessAsync pour déterminer le niveau d’activité d’arrière-plan que l’utilisateur autorise, car l’utilisateur a peut-être désactivé l’activité en arrière-plan pour votre application.Before registering the ApplicationTrigger background task, call RequestAccessAsync to determine the level of background activity the user allows because the user may have disabled background activity for your app. Pour plus d’informations sur la façon dont les utilisateurs peuvent contrôler les paramètres de l’activité d’arrière-plan, consultez optimiser l’activité en arrière-plan .See Optimize background activity for more information about the ways users can control the settings for background activity.

var requestStatus = await Windows.ApplicationModel.Background.BackgroundExecutionManager.RequestAccessAsync();
if (requestStatus != BackgroundAccessStatus.AlwaysAllowed)
{
   // Depending on the value of requestStatus, provide an appropriate response
   // such as notifying the user which functionality won't work as expected
}

Inscrire la tâche en arrière-planRegister the background task

Inscrivez la tâche en arrière-plan en appelant la fonction qui vous permet de le faire.Register the background task by calling your background task registration function. Pour plus d’informations sur l’inscription des tâches en arrière-plan et pour voir la définition de la méthode RegisterBackgroundTask () dans l’exemple de code ci-dessous, consultez inscrire une tâche en arrière-plan.For more information on registering background tasks, and to see the definition of the RegisterBackgroundTask() method in the sample code below, see Register a background task.

Si vous envisagez d’utiliser un déclencheur d’application pour étendre la durée de vie de votre processus de premier plan, envisagez d’utiliser à la place une exécution étendue .If you are considering using an Application Trigger to extend the lifetime of your foreground process, consider using Extended Execution instead. Le déclencheur d’application est conçu pour créer un processus hébergé séparément pour effectuer des tâches dans.The Application Trigger is designed for creating a separately hosted process to do work in. L’extrait de code suivant inscrit un déclencheur d’arrière-plan out-of-process.The following code snippet registers an out-of-process background trigger.

string entryPoint = "Tasks.ExampleBackgroundTaskClass";
string taskName   = "Example application trigger";

BackgroundTaskRegistration task = RegisterBackgroundTask(entryPoint, taskName, appTrigger, internetCondition);
std::wstring entryPoint{ L"Tasks.ExampleBackgroundTaskClass" };
std::wstring taskName{ L"Example application trigger" };

Windows::ApplicationModel::Background::BackgroundTaskRegistration task{
    RegisterBackgroundTask(entryPoint, taskName, appTrigger, internetCondition) };
String ^ entryPoint = "Tasks.ExampleBackgroundTaskClass";
String ^ taskName   = "Example application trigger";

BackgroundTaskRegistration ^ task = RegisterBackgroundTask(entryPoint, taskName, appTrigger, internetCondition);

Les paramètres d’inscription de la tâche en arrière-plan sont validés au moment de l’inscription.Background task registration parameters are validated at the time of registration. Si l’un des paramètres d’inscription n’est pas valide, une erreur est renvoyée.An error is returned if any of the registration parameters are invalid. Vérifiez que votre application gère de manière fluide les scénarios dans lesquels l’inscription de la tâche en arrière-plan échoue. En revanche, si votre application dépend d’un objet d’inscription valide après la tentative d’inscription d’une tâche, elle peut se bloquer.Ensure that your app gracefully handles scenarios where background task registration fails - if instead your app depends on having a valid registration object after attempting to register a task, it may crash.

Déclencher la tâche en arrière-planTrigger the background task

Avant de déclencher la tâche en arrière-plan, utilisez BackgroundTaskRegistration pour vérifier que la tâche en arrière-plan est inscrite.Before you trigger the background task, use BackgroundTaskRegistration to verify that the background task is registered. Il est judicieux de vérifier que toutes les tâches en arrière-plan sont inscrites lors du lancement de l’application.A good time to verify that all of your background tasks are registered is during app launch.

Déclenchez la tâche en arrière-plan en appelant ApplicationTrigger. RequestAsync.Trigger the background task by calling ApplicationTrigger.RequestAsync. Toute instance ApplicationTrigger fera.Any ApplicationTrigger instance will do.

Notez que ApplicationTrigger. RequestAsync ne peut pas être appelé à partir de la tâche en arrière-plan elle-même, ou quand l’application est en cours d’exécution (voir cycle de vie des applications pour plus d’informations sur les États de l’application).Note that ApplicationTrigger.RequestAsync can't be called from the background task itself, or when the app is in the background running state (see App lifecycle for more information about application states). Elle peut retourner DisabledByPolicy si l’utilisateur a défini des stratégies d’énergie ou de confidentialité qui empêchent l’application d’effectuer une activité en arrière-plan.It may return DisabledByPolicy if the user has set energy or privacy policies that prevent the app from performing background activity. En outre, un seul AppTrigger peut être exécuté à la fois.Also, only one AppTrigger can run at a time. Si vous tentez d’exécuter un AppTrigger alors qu’un autre est déjà en cours d’exécution, la fonction renverra CurrentlyRunning.If you attempt to run an AppTrigger while another is already running, the function will return CurrentlyRunning.

var result = await _AppTrigger.RequestAsync();

Gérer les ressources pour votre tâche en arrière-planManage resources for your background task

Utilisez la méthode BackgroundExecutionManager.RequestAccessAsync pour déterminer si l’utilisateur a opté pour une activité limitée de votre application en arrière-plan.Use BackgroundExecutionManager.RequestAccessAsync to determine if the user has decided that your app’s background activity should be limited. Tenez compte du taux d’utilisation de la batterie ; exécutez l’application en arrière-plan uniquement lorsqu’elle est nécessaire dans le cadre d’une action souhaitée par l’utilisateur.Be aware of your battery usage and only run in the background when it is necessary to complete an action that the user wants. Pour plus d’informations sur la façon dont les utilisateurs peuvent contrôler les paramètres de l’activité d’arrière-plan, consultez optimiser l’activité en arrière-plan .See Optimize background activity for more information about the ways users can control the settings for background activity.

  • Mémoire : le réglage de la mémoire et de l’utilisation de l’énergie de votre application est essentiel pour garantir que le système d’exploitation permettra l’exécution de votre tâche en arrière-plan.Memory: Tuning your app's memory and energy use is key to ensuring that the operating system will allow your background task to run. Utilisez les API de gestion de la mémoire pour voir la quantité de mémoire utilisée par votre tâche en arrière-plan.Use the Memory Management APIs to see how much memory your background task is using. Plus la tâche en arrière-plan utilise de la mémoire, plus il est difficile pour le système d’exploitation de le maintenir en cours d’exécution lorsqu’une autre application est au premier plan.The more memory your background task uses, the harder it is for the OS to keep it running when another app is in the foreground. L’utilisateur dispose d’un contrôle étroit sur l’ensemble des activités en arrière-plan que votre application peut exécuter, et bénéficie d’une visibilité étendue sur l’impact de cette dernière sur le taux d’utilisation de la batterie.The user is ultimately in control of all background activity that your app can perform and has visibility on the impact your app has on battery use.
  • Temps processeur : les tâches en arrière-plan sont limitées par la durée d’utilisation de l’horloge sur le type de déclencheur.CPU time: Background tasks are limited by the amount of wall-clock usage time they get based on trigger type. Les tâches en arrière-plan déclenchées par le déclencheur d’application sont limitées à environ 10 minutes.Background tasks triggered by the Application trigger are limited to about 10 minutes.

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.

RemarquesRemarks

À compter de Windows 10, il n’est plus nécessaire pour l’utilisateur d’ajouter votre application à l’écran de verrouillage afin d’utiliser des tâches en arrière-plan.Starting with Windows 10, it is no longer necessary for the user to add your app to the lock screen in order to utilize background tasks.

Une tâche en arrière-plan s’exécute uniquement à l’aide d’un ApplicationTrigger si vous avez appelé RequestAccessAsync en premier.A background task will only run using an ApplicationTrigger if you have called RequestAccessAsync first.