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


Запуск фоновой задачи по таймеру

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

См . раздел "Сценарий4 " в примере фоновой активации, чтобы просмотреть пример реализации фоновой задачи, описанной в этом разделе.

В этом разделе предполагается, что у вас есть фоновая задача, которая должна периодически выполняться или в определенное время. Если у вас еще нет фоновой задачи, в BackgroundActivity.cs есть пример фоновой задачи. Также выполните действия, описанные в разделе "Создание и регистрация фоновой задачи в процессе" или "Создание" и регистрация фоновой задачи вне процесса для создания.

Создание триггера времени

Создайте объект TimeTrigger. Второй параметр OneShot указывает, будет ли фоновая задача выполняться только один раз или периодически выполняться. Если для OneShot задано значение true, первый параметр (FreshnessTime) указывает количество минут ожидания перед планированием фоновой задачи. Если для OneShot задано значение false, FreshnessTime указывает частоту выполнения фоновой задачи.

Встроенный таймер для приложений универсальная платформа Windows (UWP), предназначенных для семейства классических или мобильных устройств, выполняет фоновые задачи в 15-минутных интервалах. (Таймер выполняется в 15-минутных интервалах, чтобы система должна проснуться каждые 15 минут для пробуждения приложений, запрашивающих TimerTriggers-который экономит мощность.)

  • Если для FreshnessTime задано значение 15 минут и OneShot имеет значение true, задача будет запланирована один раз, начиная с 15 до 30 минут с момента регистрации. Если задано значение 25 минут, и OneShot имеет значение true, задача будет выполняться один раз, начиная с 25 до 40 минут с момента регистрации.

  • Если для FreshnessTime задано значение 15 минут и OneShot имеет значение false, задача будет выполняться каждые 15 минут, начиная с 15 до 30 минут с момента регистрации. Если задано значение n минут и OneShot имеет значение false, задача будет запланирована на выполнение каждые n минут, начиная с n и n + 15 минут после регистрации.

Примечание.

Если для FreshnessTime задано значение менее 15 минут, при попытке зарегистрировать фоновую задачу возникает исключение.

Например, этот триггер приведет к выполнению фоновой задачи один раз в час.

TimeTrigger hourlyTrigger = new TimeTrigger(60, false);
Windows::ApplicationModel::Background::TimeTrigger hourlyTrigger{ 60, false };
TimeTrigger ^ hourlyTrigger = ref new TimeTrigger(60, false);

(Необязательно) Добавление условия

Вы можете создать условие фоновой задачи для управления выполнением задачи. Условие предотвращает выполнение фоновой задачи до тех пор, пока условие не будет выполнено. Дополнительные сведения см. в разделе "Задание условий для выполнения фоновой задачи".

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

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

Дополнительные сведения об условиях и типах фоновых триггеров см. в статье "Поддержка приложения с фоновыми задачами".

Вызов RequestAccessAsync()

Прежде чем зарегистрировать фоновую задачу ApplicationTrigger , вызовите RequestAccessAsync , чтобы определить уровень фонового действия, который пользователь разрешает, так как пользователь может отключить фоновое действие для приложения. Дополнительные сведения о том, как пользователи могут управлять параметрами фонового действия, см. в разделе "Оптимизация фонового действия ".

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
}

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

Зарегистрируйте фоновую задачу, вызвав функцию регистрации фоновых задач. Дополнительные сведения о регистрации фоновых задач и определении метода RegisterBackgroundTask() см . в разделе "Регистрация фоновой задачи".

Внимание

Для фоновых задач, выполняемых в том же процессе, что и приложение, не устанавливайте entryPoint. Для фоновых задач, выполняемых в отдельном процессе от приложения, задайте entryPoint для пространства имен , "." и имени класса, содержащего реализацию фоновой задачи.

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

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

Управление ресурсами для фоновой задачи

Используйте BackgroundExecutionManager.RequestAccessAsync , чтобы определить, должен ли пользователь решить, что фоновая активность приложения должна быть ограничена. Помните об использовании батареи и запустите его только в фоновом режиме, если необходимо выполнить действие, которое пользователь хочет. Дополнительные сведения о том, как пользователи могут управлять параметрами фонового действия, см. в разделе "Оптимизация фонового действия ".

  • Память. Настройка памяти и энергопотребления приложения является ключом для обеспечения того, чтобы операционная система позволяла выполнять фоновую задачу. Используйте API управления памятью, чтобы узнать, сколько памяти используется фоновая задача. Чем больше памяти используется фоновая задача, тем сложнее, чтобы операционная система выполняла ее, когда другое приложение находится на переднем плане. Пользователь в конечном счете контролирует все фоновые действия, которые ваше приложение может выполнять и имеет видимость о влиянии вашего приложения на использование батареи.
  • Время ЦП: фоновые задачи ограничиваются объемом времени использования в часах, которые они получают на основе типа триггера.

См. статью "Поддержка приложения с фоновыми задачами" для ограничений ресурсов, применяемых к фоновым задачам .

Замечания

Начиная с Windows 10, пользователю больше не нужно добавлять приложение на экран блокировки, чтобы использовать фоновые задачи.

Фоновая задача будет выполняться только с помощью TimeTrigger, если вы сначала назвали RequestAccessAsync.