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


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

Основные API

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

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

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

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

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

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

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

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

Следующий код создает объект SystemCondition, указывающий условие Интернет-доступность :

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.