Запуск фоновой задачи по таймеру
Узнайте, как запланировать однократное выполнение фоновой задачи или периодически запускать фоновую задачу с помощью элемента TimeTrigger.
См. раздел Scenario4 в статье Пример фоновой активации, чтобы изучить пример реализации фоновой задачи, активируемой временем, описанный в этом разделе.
В разделе предполагается, что у вас есть фоновая задача, которая должна выполняться периодически или в определенное время. Если у вас еще нет в фоновом режиме, это пример фоновой задачи в BackgroundActivity.cs. Или же выполните шаги из раздела Создание и регистрация фоновой задачи, выполняемой в процессе или Создание и регистрация фоновой задачи, выполняемой вне процесса для создания задачи.
Создание триггера времени
Создайте новый TimeTrigger. Второй параметр OneShot указывает, будет ли фоновая задача выполняться однократно или периодически. Если OneShot имеет значение True, первый параметр (FreshnessTime) задает число минут ожидания перед планированием фоновой задачи. Если OneShot имеет значение False, частоту выполнения фоновой задачи определяет FreshnessTime.
Встроенный таймер для приложений 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-интерфейсы управления памятью, чтобы узнать, сколько памяти потребляет ваше фоновое задание. Чем больше памяти потребляет ваше фоновое задание, тем сложнее операционной системе поддерживать его выполнение, когда другое приложение работает на переднем плане. Пользователь полностью контролирует все фоновые действия, которые может выполнять ваше приложение, и видит, как ваше приложение влияет на расход заряда батареи.
- Время ЦП: Фоновые задачи ограничены физическим временем использования, которое они получают в зависимости от типа триггера.
Сведения об ограничениях ресурсов для фоновых задач см. в статье Поддержка приложения с помощью фоновых задач.
Комментарии
Начиная c Windows 10, пользователю больше не потребуется добавлять приложения на экран блокировки, чтобы использовать фоновые задачи.
Фоновая задача будет запускаться только с помощью TimeTrigger, если вызван метод RequestAccessAsync.
Связанные темы
- Руководство по работе с фоновыми задачами
- Пример кода фоновой задачи
- Создание и регистрация фоновой задачи, выполняемой внутри процесса
- Создание и регистрация внепроцессной фоновой задачи
- Отладка фоновой задачи
- Объявление фоновых задач в манифесте приложения
- Освобождение памяти при переходе приложения в фоновый режим
- Обработка отмененной фоновой задачи
- Вызов событий приостановки, возобновления и фоновых событий в приложениях UWP (во время отладки)
- Отслеживание хода выполнения и завершения фоновых задач
- Задержка приостановки приложения с помощью расширенного сеанса выполнения
- Регистрация фоновой задачи
- Реагирование на системные события с помощью фоновых задач
- Задание условий выполнения фоновой задачи
- Обновление живой плитки из фоновой задачи
- Использование триггера обслуживания
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по