Définir des conditions pour exécuter une tâche en arrière-plan

API importantes

Découvrez comment définir des conditions qui contrôlent le moment auquel votre tâche en arrière-plan s’exécutera.

Parfois, les tâches en arrière-plan nécessitent que certaines conditions soient remplies pour que la tâche en arrière-plan réussisse. Vous pouvez spécifier une ou plusieurs des conditions spécifiées par SystemConditionType au moment d’inscrire votre tâche en arrière-plan. La condition est vérifiée une fois le déclencheur déclenché. La tâche en arrière-plan est ensuite mise en file d’attente, mais elle ne s’exécute pas tant que toutes les conditions requises ne sont pas remplies.

La mise en place de conditions sur les tâches en arrière-plan permet d’économiser l’autonomie de la batterie et du processeur en empêchant les tâches de s’exécuter inutilement. Par exemple, si votre tâche en arrière-plan est exécutée sur un minuteur et nécessite une connectivité Internet, ajoutez la condition InternetAvailable au TaskBuilder avant d’inscrire la tâche. Cela empêchera ainsi la tâche de faire inutilement appel aux ressources système et à l’autonomie de la batterie. Elle s’exécutera uniquement une fois que le minuteur sera arrivé à expiration et qu’Internet sera accessible.

Il est également possible de combiner plusieurs conditions en appelant AddCondition plusieurs fois sur le même TaskBuilder. Veillez à ne pas ajouter de conditions conflictuelles, telles que UserPresent et UserNotPresent.

Créer un objet SystemCondition

Cette rubrique suppose qu’une tâche en arrière-plan est déjà associée à votre application et que cette dernière comporte déjà du code qui crée un objet BackgroundTaskBuilder nommé taskBuilder. Consultez 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 si vous devez commencer par créer une tâche en arrière-plan.

Cette rubrique concerne aussi bien les tâches en arrière-plan qui s’exécutent hors processus que celles qui s’exécutent dans le même processus que l’application au premier plan.

Avant d’ajouter la condition, créez un objet SystemCondition pour représenter la condition qui doit être en vigueur pour qu’une tâche en arrière-plan s’exécute. Dans le constructeur, spécifiez la condition qui doit être remplie avec une valeur d’énumération SystemConditionType .

Le code suivant crée un objet SystemCondition qui spécifie la condition InternetAvailable :

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

Ajouter l’objet SystemCondition à votre tâche en arrière-plan

Pour ajouter la condition, appelez la méthode AddCondition sur l’objet BackgroundTaskBuilder et passez-lui l’objet SystemCondition .

Le code suivant utilise taskBuilder pour ajouter la condition InternetAvailable .

taskBuilder.AddCondition(internetCondition);
taskBuilder.AddCondition(internetCondition);
taskBuilder->AddCondition(internetCondition);

Inscrire votre tâche en arrière-plan

Vous pouvez maintenant inscrire votre tâche en arrière-plan avec la méthode Register , et la tâche en arrière-plan ne démarre pas tant que la condition spécifiée n’est pas remplie.

Le code suivant inscrit la tâche et stocke l’objet BackgroundTaskRegistration obtenu :

BackgroundTaskRegistration task = taskBuilder.Register();
Windows::ApplicationModel::Background::BackgroundTaskRegistration task{ recurringTaskBuilder.Register() };
BackgroundTaskRegistration ^ task = taskBuilder->Register();

Notes

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.

Placer plusieurs conditions dans la tâche en arrière-plan

Pour ajouter plusieurs conditions, votre application effectue plusieurs appels à la méthode AddCondition. Pour être effectifs, ces appels doivent intervenir avant l’inscription de la tâche.

Notes

Veillez à ne pas ajouter de conditions conflictuelles à une tâche en arrière-plan.

L’extrait de code suivant montre plusieurs conditions dans le contexte de la création et de l’inscription d’une tâche en arrière-plan.

// Set up the background task.
TimeTrigger hourlyTrigger = new TimeTrigger(60, false);

var recurringTaskBuilder = new BackgroundTaskBuilder();

recurringTaskBuilder.Name           = "Hourly background task";
recurringTaskBuilder.TaskEntryPoint = "Tasks.ExampleBackgroundTaskClass";
recurringTaskBuilder.SetTrigger(hourlyTrigger);

// Begin adding conditions.
SystemCondition userCondition     = new SystemCondition(SystemConditionType.UserPresent);
SystemCondition internetCondition = new SystemCondition(SystemConditionType.InternetAvailable);

recurringTaskBuilder.AddCondition(userCondition);
recurringTaskBuilder.AddCondition(internetCondition);

// Done adding conditions, now register the background task.

BackgroundTaskRegistration task = recurringTaskBuilder.Register();
// Set up the background task.
Windows::ApplicationModel::Background::TimeTrigger hourlyTrigger{ 60, false };

Windows::ApplicationModel::Background::BackgroundTaskBuilder recurringTaskBuilder;

recurringTaskBuilder.Name(L"Hourly background task");
recurringTaskBuilder.TaskEntryPoint(L"Tasks.ExampleBackgroundTaskClass");
recurringTaskBuilder.SetTrigger(hourlyTrigger);

// Begin adding conditions.
Windows::ApplicationModel::Background::SystemCondition userCondition{
    Windows::ApplicationModel::Background::SystemConditionType::UserPresent };
Windows::ApplicationModel::Background::SystemCondition internetCondition{
    Windows::ApplicationModel::Background::SystemConditionType::InternetAvailable };

recurringTaskBuilder.AddCondition(userCondition);
recurringTaskBuilder.AddCondition(internetCondition);

// Done adding conditions, now register the background task.
Windows::ApplicationModel::Background::BackgroundTaskRegistration task{ recurringTaskBuilder.Register() };
// Set up the background task.
TimeTrigger ^ hourlyTrigger = ref new TimeTrigger(60, false);

auto recurringTaskBuilder = ref new BackgroundTaskBuilder();

recurringTaskBuilder->Name           = "Hourly background task";
recurringTaskBuilder->TaskEntryPoint = "Tasks.ExampleBackgroundTaskClass";
recurringTaskBuilder->SetTrigger(hourlyTrigger);

// Begin adding conditions.
SystemCondition ^ userCondition     = ref new SystemCondition(SystemConditionType::UserPresent);
SystemCondition ^ internetCondition = ref new SystemCondition(SystemConditionType::InternetAvailable);

recurringTaskBuilder->AddCondition(userCondition);
recurringTaskBuilder->AddCondition(internetCondition);

// Done adding conditions, now register the background task.
BackgroundTaskRegistration ^ task = recurringTaskBuilder->Register();

Remarques

Notes

Choisissez des conditions pour votre tâche en arrière-plan afin qu’elle ne s’exécute que lorsqu’elle est nécessaire et qu’elle ne s’exécute pas quand elle ne le devrait pas. Pour obtenir des descriptions des différentes conditions de tâche en arrière-plan, consultez SystemConditionType .