Exécuter une tâche en arrière-plan en fonction d’un minuteurRun a background task on a timer

Découvrez comment utiliser timetrigger pour planifier une tâche d’arrière-plan à usage unique ou exécuter une tâche en arrière-plan périodique.Learn how to use the TimeTrigger to schedule a one-time background task, or run a periodic background task.

Consultez Scenario4 dans l' exemple d’activation en arrière-plan pour voir un exemple d’implémentation de la tâche en arrière-plan déclenchée par l’heure décrite dans cette rubrique.See Scenario4 in the Background activation sample to see an example of how to implement the time triggered background task described in this topic.

Cette rubrique suppose que vous avez une tâche en arrière-plan qui doit s’exécuter périodiquement ou à un moment donné.This topic assumes that you have a background task that needs to run periodically, or at a specific time. 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 de la section créer et inscrire une tâche en arrière-plan in-process , ou 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 in-process background task or Create and register an out-of-process background task to create one.

Créer un déclencheur de tempsCreate a time trigger

Créez un TimeTrigger.Create a new TimeTrigger. Le second paramètre, OneShot, indique si la tâche en arrière-plan s’exécute une seule fois ou régulièrement.The second parameter, OneShot, specifies whether the background task will run only once or keep running periodically. Si OneShot est défini sur true, le premier paramètre (FreshnessTime) indique le nombre de minutes à attendre avant de planifier la tâche en arrière-plan.If OneShot is set to true, the first parameter (FreshnessTime) specifies the number of minutes to wait before scheduling the background task. Si OneShot est défini sur false, le paramètre FreshnessTime indique la fréquence d’exécution de la tâche en arrière-plan.If OneShot is set to false, FreshnessTime specifies the frequency at which the background task will run.

Le minuteur intégré pour les applications de plateforme Windows universelle (UWP) qui ciblent les appareils mobiles ou de bureau exécute des tâches en arrière-plan par intervalles de 15 minutes.The built-in timer for Universal Windows Platform (UWP) apps that target the desktop or mobile device family runs background tasks in 15-minute intervals. (La minuterie s’exécute par intervalles de 15 minutes pour que le système ait uniquement besoin de réveiller une fois toutes les 15 minutes pour réveiller les applications qui ont demandé TimerTriggers, ce qui économise de l’énergie.)(The timer runs in 15-minute intervals so that the system only needs to wake once every 15 minutes to wake up the apps that have requested TimerTriggers--which saves power.)

  • Si FreshnessTime indique une fréquence de 15 minutes et que OneShot est défini sur true, la tâche sera programmée pour être exécutée une seule fois, 15 à 30 minutes après son inscription.If FreshnessTime is set to 15 minutes and OneShot is true, the task will be scheduled to run once starting between 15 and 30 minutes from the time it is registered. Si le paramètre FreshnessTime indique une fréquence de 25 minutes et que OneShot est défini sur true, la tâche sera programmée pour être exécutée une seule fois, 25 à 40 minutes après son inscription.If it is set to 25 minutes and OneShot is true, the task will be scheduled to run once starting between 25 and 40 minutes from the time it is registered.

  • Si FreshnessTime indique une fréquence de 15 minutes et que OneShot est défini sur false, la tâche sera programmée pour être exécutée toutes les 15 minutes, 15 à 30 minutes après son inscription.If FreshnessTime is set to 15 minutes and OneShot is false, the task will be scheduled to run every 15 minutes starting between 15 and 30 minutes from the time it is registered. Si FreshnessTime indique une fréquence de n minutes et que OneShot est défini sur false, la tâche sera programmée pour être exécutée toutes les n minutes, n à n+15 minutes après son inscription.If it is set to n minutes and OneShot is false, the task will be scheduled to run every n minutes starting between n and n + 15 minutes after it is registered.

Notes

Si FreshnessTime a une valeur inférieure à 15 minutes, une exception est levée lors de la tentative d’inscription de la tâche en arrière-plan.If FreshnessTime is set to less than 15 minutes, an exception is thrown when attempting to register the background task.

Par exemple, ce déclencheur entraîne l’exécution d’une tâche en arrière-plan une fois par heure.For example, this trigger will cause a background task to run once an hour.

TimeTrigger hourlyTrigger = new TimeTrigger(60, false);
Windows::ApplicationModel::Background::TimeTrigger hourlyTrigger{ 60, false };
TimeTrigger ^ hourlyTrigger = ref new TimeTrigger(60, false);

(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 UserPresent. Ainsi, une fois déclenchée, la tâche s’exécute une fois que l’utilisateur est actif.In this example the condition is set to UserPresent so that, once triggered, the task only runs once the user is active. Pour obtenir la liste des conditions possibles, consultez SystemConditionType.For a list of possible conditions, see SystemConditionType.

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

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.

Important

Pour les tâches en arrière-plan qui s’exécutent dans le même processus que votre application, ne définissez pas entryPoint .For background tasks that run in the same process as your app, do not set entryPoint. Pour les tâches en arrière-plan qui s’exécutent dans un processus séparé de votre application, définissez entryPoint comme étant l’espace de noms, '. 'et le nom de la classe qui contient votre implémentation de tâche en arrière-plan.For background tasks that run in a separate process from your app, set entryPoint to be the namespace, '.', and the name of the class that contains your background task implementation.

string entryPoint = "Tasks.ExampleBackgroundTaskClass";
string taskName   = "Example hourly background task";

BackgroundTaskRegistration task = RegisterBackgroundTask(entryPoint, taskName, hourlyTrigger, userCondition);
std::wstring entryPoint{ L"Tasks.ExampleBackgroundTaskClass" };
std::wstring taskName{ L"Example hourly background task" };

Windows::ApplicationModel::Background::BackgroundTaskRegistration task{
    RegisterBackgroundTask(entryPoint, taskName, hourlyTrigger, userCondition) };
String ^ entryPoint = "Tasks.ExampleBackgroundTaskClass";
String ^ taskName   = "Example hourly background task";

BackgroundTaskRegistration ^ task = RegisterBackgroundTask(entryPoint, taskName, hourlyTrigger, userCondition);

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.

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.

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 timetrigger si vous avez appelé RequestAccessAsync en premier.A background task will only run using a TimeTrigger if you have called RequestAccessAsync first.