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 à usage unique ou exécuter une tâche en arrière-plan périodique.

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 dans le temps décrite 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 dans 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 second paramètre, OneShot, indique si la tâche en arrière-plan s’exécute une seule fois ou régulièrement. 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. 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.

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. (Le minuteur s’exécute par intervalles de 15 minutes de sorte que le système n’a besoin de sortir 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 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. 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.

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

Notes

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 l’exécution de la tâche. Une condition empêche l’exécution de la tâche en arrière-plan tant que la condition n’est pas remplie. Pour plus d’informations, consultez Définir des conditions pour l’exécution d’une tâche en arrière-plan.

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. 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 autorisé par l’utilisateur, car il a peut-être désactivé l’activité en arrière-plan pour votre application. Pour plus d’informations sur les façons 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 la fonction qui vous permet de le faire. 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 comme étant 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 de la tâche en arrière-plan sont validés au moment de l’inscription. Si l’un des paramètres d’inscription n’est pas valide, une erreur est renvoyée. 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.

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

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. 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. Pour plus d’informations sur les façons 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 la consommation d’é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 Gestion de la mémoire pour voir la quantité de mémoire utilisée par votre tâche en arrière-plan. Plus votre tâche en arrière-plan utilise de mémoire, plus il est difficile pour le système d’exploitation de la maintenir en cours d’exécution lorsqu’une autre application est au premier plan. 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.
  • Temps processeur : les tâches en arrière-plan sont limitées par le temps d’utilisation de l’horloge murale qu’elles obtiennent en fonction du type de déclencheur.

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.

Remarques

À compter de Windows 10, il n’est plus nécessaire pour l’utilisateur d’ajouter votre application à l’écran de verrouillage pour utiliser les 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 d’abord appelé RequestAccessAsync .