Partager via


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 lors de l’inscription de votre tâche en arrière-plan. La condition sera 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 des tâches en arrière-plan permet d’économiser la durée de vie de la batterie et le processeur en empêchant les tâches de s’exécuter inutilement. Par exemple, si votre tâche en arrière-plan s’exécute sur un minuteur et nécessite une connectivité Internet, ajoutez la condition InternetAvailable à TaskBuilder avant d’inscrire la tâche. Cela permet d’empêcher la tâche d’utiliser inutilement les ressources système et la durée de vie de la batterie en exécutant uniquement la tâche en arrière-plan lorsque le minuteur s’est écoulé et que l’Internet est disponible.

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 que vous disposez d’une tâche en arrière-plan déjà associée à votre application et que votre application inclut 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 d’abord créer une tâche en arrière-plan.

Cette rubrique s’applique aux tâches en arrière-plan qui s’exécutent hors processus, ainsi qu’à celles qui s’exécutent dans le même processus que l’application de 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 transmettez-la à l’objet SystemCondition.

Le code suivant utilise taskBuilder pour ajouter la condition InternetAvailable .

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

Enregistrez votre tâche d’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 résultant :

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

Remarque

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.

Placer plusieurs conditions sur votre tâche en arrière-plan

Pour ajouter plusieurs conditions, votre application effectue plusieurs appels à la méthode AddCondition. Ces appels doivent être effectués avant que l’inscription des tâches soit effective.

Remarque

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();

Notes

Remarque

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