Partager via


Exécuter une tâche en arrière-plan en fonction d’un minuteur

Découvrez comment utiliser TimeTrigger pour planifier une tâche en arrière-plan ponctuelle ou exécuter une tâche en arrière-plan périodique.

Consultez le scénario4 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 le temps décrit dans cette rubrique.

Cette rubrique suppose que vous disposez d’une tâche en arrière-plan qui doit s’exécuter régulièrement ou à un moment spécifique. Si vous n’avez pas encore de tâche en arrière-plan, il existe un exemple de tâche en arrière-plan à BackgroundActivity.cs. Vous pouvez également suivre les étapes décrites dans 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 hors processus pour en créer une.

Créer un déclencheur de temps

Créez un TimeTrigger. Le deuxième paramètre, OneShot, spécifie si la tâche en arrière-plan ne s’exécute qu’une seule fois ou continue à s’exécuter régulièrement. Si OneShot a la valeur true, le premier paramètre (FreshnessTime) spécifie le nombre de minutes à attendre avant de planifier la tâche en arrière-plan. Si OneShot a la valeur false, FreshnessTime spécifie la fréquence à laquelle la tâche en arrière-plan s’exécute.

Le minuteur intégré pour les applications plateforme Windows universelle (UWP) qui ciblent la famille d’appareils mobiles ou de bureau exécute des tâches en arrière-plan à intervalles de 15 minutes. (Le minuteur s’exécute à intervalles de 15 minutes afin que le système ne doit se réveiller qu’une fois toutes les 15 minutes pour réveiller les applications qui ont demandé TimerTriggers, ce qui permet d’économiser de l’énergie.)

  • Si FreshnessTime est défini sur 15 minutes et Que OneShot a la valeur true, la tâche est planifiée pour s’exécuter une fois démarrée entre 15 et 30 minutes à partir du moment où elle est inscrite. S’il est défini sur 25 minutes et Que OneShot est vrai, la tâche est planifiée pour s’exécuter une fois démarrée entre 25 et 40 minutes à partir du moment où elle est inscrite.

  • Si FreshnessTime est défini sur 15 minutes et Que OneShot a la valeur false, la tâche est planifiée pour s’exécuter toutes les 15 minutes à partir de 15 à 30 minutes à partir du moment où elle est inscrite. S’il est défini sur n minutes et Que OneShot a la valeur false, la tâche est planifiée pour s’exécuter toutes les n minutes à partir de n et n + 15 minutes après son inscription.

Remarque

Si FreshnessTime est défini sur moins de 15 minutes, une exception est levée lors de la tentative d’inscription de la tâche en arrière-plan.

Par exemple, ce déclencheur entraîne l’exécution d’une tâche en arrière-plan une fois par heure.

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

(Facultatif) Ajouter une condition

Vous pouvez créer une condition de tâche en arrière-plan pour contrôler quand la tâche s’exécute. Une condition empêche l’exécution de la tâche en arrière-plan jusqu’à ce que la condition soit remplie. Pour plus d’informations, consultez Définir les conditions d’exécution d’une tâche en arrière-plan.

Dans cet exemple, la condition est définie sur UserPresent afin que, une fois déclenchée, la tâche s’exécute uniquement une fois que l’utilisateur est actif. Pour obtenir la liste des conditions possibles, consultez 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 plus d’informations détaillées sur les conditions et les types de déclencheurs en arrière-plan, consultez Prise en charge de votre application avec des tâches en arrière-plan.

Appeler RequestAccessAsync()

Avant d’inscrire la tâche en arrière-plan ApplicationTrigger , appelez RequestAccessAsync pour déterminer le niveau d’activité en arrière-plan que l’utilisateur autorise, car l’utilisateur peut avoir désactivé l’activité en arrière-plan pour votre application. Pour plus d’informations sur la façon dont les utilisateurs peuvent contrôler les paramètres de l’activité en arrière-plan, consultez Optimiser l’activité en arrière-plan.

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-plan

Inscrivez la tâche en arrière-plan en appelant votre fonction d’inscription de tâche en arrière-plan. 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.

Important

Pour les tâches en arrière-plan qui s’exécutent dans le même processus que votre application, ne définissez entryPointpas . Pour les tâches en arrière-plan qui s’exécutent dans un processus distinct de votre application, définissez entryPoint l’espace de noms « . » et le nom de la classe qui contient votre implémentation de tâche en arrière-plan.

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 des tâches en arrière-plan sont validés au moment de l’inscription. Une erreur est retournée si l’un des paramètres d’inscription n’est pas valide. Assurez-vous que votre application gère correctement les scénarios où l’inscription des tâches en arrière-plan échoue. Si votre application dépend plutôt d’avoir un objet d’inscription valide après avoir tenté d’inscrire une tâche, il peut se bloquer.

Gérer les ressources de votre tâche en arrière-plan

Utilisez BackgroundExecutionManager.RequestAccessAsync pour déterminer si l’utilisateur a décidé que l’activité en arrière-plan de votre application doit être limitée. N’oubliez pas l’utilisation de votre batterie et exécutez uniquement en arrière-plan quand il est nécessaire d’effectuer une action souhaitée par l’utilisateur. Pour plus d’informations sur la façon dont les utilisateurs peuvent contrôler les paramètres de l’activité en arrière-plan, consultez Optimiser l’activité en arrière-plan.

  • Mémoire : le réglage de la mémoire et de l’énergie de votre application est essentiel pour vous assurer que le système d’exploitation permettra à votre tâche en arrière-plan de s’exécuter. 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. Plus la mémoire utilisée par votre tâche en arrière-plan est élevée, 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. L’utilisateur contrôle finalement toutes les activités en arrière-plan que votre application peut effectuer et a une visibilité sur l’impact que votre application a sur l’utilisation de la batterie.
  • Temps processeur : les tâches en arrière-plan sont limitées par la quantité de temps d’utilisation de l’horloge murale qu’elles obtiennent en fonction du type de déclencheur.

Consultez Prendre en charge votre application avec des tâches en arrière-plan pour les contraintes de ressources appliquées aux tâches en arrière-plan.

Notes

À 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.

Une tâche en arrière-plan s’exécute uniquement à l’aide d’un TimeTrigger si vous avez appelé RequestAccessAsync en premier.