Partager via


Exécuter une tâche en arrière-plan sur 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 Scénario4 dans l’exemple d'activation de tâche 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écrite dans ce sujet.

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. Ou suivez les étapes de Créer et inscrire une tâche en arrière-plan en cours de processus ou Créer et inscrire une tâche en arrière-plan hors du processus pour en créer une.

Créer un déclencheur de temps

Créez un nouveau 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 de 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 OneShot est vrai, la tâche est planifiée pour s'exécuter une fois, devant démarrer entre 15 et 30 minutes à partir du moment où elle est enregistrée. S’il est défini sur 25 minutes et si OneShot est vrai, la tâche sera planifiée pour s’exécuter une fois entre 25 et 40 minutes après son enregistrement.

  • Si FreshnessTime est défini sur 15 minutes et OneShot est faux, la tâche sera planifiée pour s'exécuter toutes les 15 minutes dans un délai de 15 à 30 minutes à partir du moment où elle est enregistrée. S’il est défini sur n minutes et que OneShot est faux, la tâche sera planifiée pour s’exécuter toutes les n minutes, commençant entre n et n + 15 minutes après son inscription.

Remarque

Si FreshnessTime a une valeur inférieure à 15 minutes, une exception est levée lorsqu'il y a tentative d'inscrire 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 Soutenez votre application avec des tâches en arrière-plan.

Appeler la fonction 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
}

Enregistrer la tâche d'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 d'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 Soutenez votre application avec des tâches en arrière-plan pour connaître les contraintes de ressources appliquées aux tâches en arrière-plan.

Remarques

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