Поделиться через


Задание условий выполнения фоновой задачи

Важные API

Узнайте, как задать условия, управляющие выполнением фоновой задачи.

Иногда фоновые задачи требуют выполнения определенных условий для успешной фоновой задачи. При регистрации фоновой задачи можно указать одно или несколько условий, указанных SystemConditionType . Условие будет проверено после запуска триггера. Затем фоновая задача будет помещена в очередь, но она не будет выполняться до тех пор, пока не будут выполнены все необходимые условия.

Размещение условий в фоновых задачах экономит время работы батареи и ЦП, предотвращая выполнение задач без необходимости. Например, если фоновая задача выполняется в таймере и требует подключения к Интернету, добавьте условие InternetAvailable в TaskBuilder перед регистрацией задачи. Это поможет предотвратить использование системных ресурсов и жизни батареи без необходимости, только выполнив фоновую задачу, когда таймер истек , и Интернет доступен.

Кроме того, можно объединить несколько условий путем вызова AddCondition несколько раз в одном и том же TaskBuilder. Не следует добавлять конфликтующие условия, такие как UserPresent и UserNotPresent.

Создание объекта SystemCondition

В этом разделе предполагается, что у вас уже есть фоновая задача, связанная с приложением, и что приложение уже содержит код, который создает объект BackgroundTaskBuilder с именем taskBuilder. См. статью "Создание и регистрация фоновой задачи в процессе" или "Создание" и регистрация фоновой задачи вне процесса, если необходимо сначала создать фоновую задачу.

Этот раздел относится к фоновым задачам, которые выполняются вне процесса, а также те, которые выполняются в том же процессе, что и приложение переднего плана.

Перед добавлением условия создайте объект SystemCondition для представления условия, которое должно применяться для выполнения фоновой задачи. В конструкторе укажите условие, которое должно соответствовать значению перечисления SystemConditionType .

Следующий код создает объект SystemCondition, указывающий условие InternetAvailable:

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

Добавление объекта SystemCondition в фоновую задачу

Чтобы добавить условие, вызовите метод AddCondition в объекте BackgroundTaskBuilder и передайте его объект SystemCondition.

Следующий код использует taskBuilder для добавления условия InternetAvailable .

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

Регистрация фоновой задачи

Теперь вы можете зарегистрировать фоновую задачу с помощью метода Register , а фоновая задача не начнется до выполнения указанного условия.

Следующий код регистрирует задачу и сохраняет полученный объект BackgroundTaskRegistration:

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

Примечание.

Параметры регистрации фоновых задач проверяются во время регистрации. Ошибка возвращается, если какие-либо из параметров регистрации недопустимы. Убедитесь, что приложение корректно обрабатывает сценарии, в которых регистрация фоновых задач завершается ошибкой. Если вместо этого приложение зависит от наличия допустимого объекта регистрации после попытки регистрации задачи, это может завершиться сбоем.

Размещение нескольких условий в фоновой задаче

Чтобы добавить несколько условий, приложение вызывает несколько вызовов метода AddCondition . Эти вызовы должны поступать до того, как регистрация задач будет эффективной.

Примечание.

Не следует добавлять конфликтующие условия в фоновую задачу.

В следующем фрагменте кода показано несколько условий в контексте создания и регистрации фоновой задачи.

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

Замечания

Примечание.

Выберите условия для фоновой задачи, чтобы она выполнялась только при необходимости и не выполнялась, когда она не должна. Описание различных условий фоновой задачи см. в SystemConditionType.