Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Узнайте, как использовать ApplicationTrigger для активации фоновой задачи из приложения.
Пример создания триггера приложения см. в этом примере.
В этом разделе предполагается, что у вас есть фоновая задача, которую необходимо активировать из приложения. Если у вас еще нет фоновой задачи, в BackgroundActivity.csесть пример фоновой задачи. Также выполните действия, описанные в создании и регистрации фоновой задачи вне процесса, для создания.
Почему используйте триггер приложения
Используйте ApplicationTrigger для запуска кода в отдельном процессе от приложения переднего плана. ApplicationTrigger подходит, если ваше приложение должно выполнять работу в фоновом режиме, даже если пользователь закрывает приложение переднего плана. Если фоновая работа должна остановиться при закрытии приложения или должна быть привязана к состоянию процесса переднего плана, то вместо этого следует использовать расширенное выполнение.
Создание триггера приложения
Создайте ApplicationTrigger. Его можно сохранить в поле, как показано в приведенном ниже фрагменте кода. Это для удобства, чтобы нам не пришлось создавать новый экземпляр позже, когда мы захотим передать сигнал триггеру. Однако, чтобы сигнализировать триггер, можно использовать любой экземпляр ApplicationTrigger.
// _AppTrigger is an ApplicationTrigger field defined at a scope that will keep it alive
// as long as you need to trigger the background task.
// Or, you could create a new ApplicationTrigger instance and use that when you want to
// trigger the background task.
_AppTrigger = new ApplicationTrigger();
// _AppTrigger is an ApplicationTrigger field defined at a scope that will keep it alive
// as long as you need to trigger the background task.
// Or, you could create a new ApplicationTrigger instance and use that when you want to
// trigger the background task.
Windows::ApplicationModel::Background::ApplicationTrigger _AppTrigger;
// _AppTrigger is an ApplicationTrigger field defined at a scope that will keep it alive
// as long as you need to trigger the background task.
// Or, you could create a new ApplicationTrigger instance and use that when you want to
// trigger the background task.
ApplicationTrigger ^ _AppTrigger = ref new ApplicationTrigger();
(Необязательно) Добавление условия
Вы можете создать условие фоновой задачи для управления выполнением задачи. Условие предотвращает выполнение фоновой задачи до тех пор, пока условие не будет выполнено. Дополнительные сведения см. в разделе Задание условий для выполнения фоновой задачи.
В этом примере для условия задано значение InternetAvailable, чтобы после активации задача выполнялась только после доступа к Интернету. Список возможных условий см. в разделе SystemConditionType.
SystemCondition internetCondition = new SystemCondition(SystemConditionType.InternetAvailable);
Windows::ApplicationModel::Background::SystemCondition internetCondition{
Windows::ApplicationModel::Background::SystemConditionType::InternetAvailable };
SystemCondition ^ internetCondition = ref new SystemCondition(SystemConditionType::InternetAvailable)
Дополнительные сведения об условиях и типах фоновых триггеров см. в статье Поддержка приложения с помощью фоновых задач.
Вызов метода 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() в приведенном ниже примере кода см. в разделе Регистрация фоновой задачи.
Если вы рассматриваете возможность использования триггера приложения для увеличения времени работы процесса на переднем плане, подумайте о том, чтобы вместо этого использовать расширенное выполнение. Триггер приложения предназначен для создания отдельно размещенного процесса для выполнения задач. В следующем фрагменте кода регистрируется внепроцессный фоновый триггер.
string entryPoint = "Tasks.ExampleBackgroundTaskClass";
string taskName = "Example application trigger";
BackgroundTaskRegistration task = RegisterBackgroundTask(entryPoint, taskName, appTrigger, internetCondition);
std::wstring entryPoint{ L"Tasks.ExampleBackgroundTaskClass" };
std::wstring taskName{ L"Example application trigger" };
Windows::ApplicationModel::Background::BackgroundTaskRegistration task{
RegisterBackgroundTask(entryPoint, taskName, appTrigger, internetCondition) };
String ^ entryPoint = "Tasks.ExampleBackgroundTaskClass";
String ^ taskName = "Example application trigger";
BackgroundTaskRegistration ^ task = RegisterBackgroundTask(entryPoint, taskName, appTrigger, internetCondition);
Параметры регистрации фоновых задач проверяются во время регистрации. Ошибка возвращается, если какие-либо из параметров регистрации недопустимы. Убедитесь, что приложение корректно обрабатывает сценарии, в которых регистрация фоновых задач завершается ошибкой. Если вместо этого приложение зависит от наличия допустимого объекта регистрации после попытки регистрации задачи, это может завершиться сбоем.
Активация фоновой задачи
Перед активацией фоновой задачи используйте BackgroundTaskRegistration, чтобы убедиться, что фоновая задача зарегистрирована. Хорошее время, чтобы убедиться, что все фоновые задачи зарегистрированы во время запуска приложения.
Активируйте фоновую задачу, вызвав ApplicationTrigger.RequestAsync. Подойдет любой экземпляр ApplicationTrigger.
Обратите внимание, что ApplicationTrigger.RequestAsync нельзя вызывать из фоновой задачи или когда приложение находится в фоновом состоянии выполнения (см. жизненный цикл приложений дополнительные сведения о состояниях приложения). Он может вернуть DisabledByPolicy, если пользователь установил политики энергосбережения или конфиденциальности, которые не позволяют приложению выполнять фоновую активность. Кроме того, одновременно может выполняться только один AppTrigger. Если вы пытаетесь запустить AppTrigger, пока другой уже запущен, функция вернет CurrentlyRunning.
var result = await _AppTrigger.RequestAsync();
Управление ресурсами для фоновой задачи
Используйте BackgroundExecutionManager.RequestAccessAsync, чтобы определить, решил ли пользователь, что фоновую активность вашего приложения следует ограничить. Помните об использовании батареи и запустите его только в фоновом режиме, если необходимо выполнить действие, которое пользователь хочет. Дополнительные сведения о том, как пользователи могут управлять параметрами фонового действия, см. в разделе
- Память. Настройка памяти и энергопотребления приложения является ключом для обеспечения того, чтобы операционная система позволяла выполнять фоновую задачу. Используйте API управления памятью , чтобы узнать, сколько памяти используется фоновая задача. Чем больше памяти используется фоновая задача, тем сложнее, чтобы операционная система выполняла ее, когда другое приложение находится на переднем плане. Пользователь в конечном счете контролирует все фоновые действия, которые ваше приложение может выполнять и имеет видимость о влиянии вашего приложения на использование батареи.
- Время работы ЦП: фоновые задачи ограничиваются объемом использования времени настенных часов, который они получают на основе типа триггера. Фоновые задачи, активированные триггером приложения, ограничены около 10 минут.
См. раздел Поддержка вашего приложения с помощью фоновых задач, чтобы узнать об ограничениях ресурсов, применяемых к фоновым задачам.
Замечания
Начиная с Windows 10, пользователю больше не нужно добавлять приложение на экран блокировки, чтобы использовать фоновые задачи.
Фоновая задача будет выполняться только с помощью ApplicationTrigger, если вы сначала вызовете RequestAccessAsync.
Связанные темы
- Рекомендации по фоновым задачам
- пример кода фоновой задачи
- Создайте и зарегистрируйте внутрипроцессную фоновую задачу.
- Создание и регистрация внепроцессной фоновой задачи
- Отладка фоновой задачи
- Укажите фоновые задачи в манифесте приложения
- Освобождайте память при переходе приложения в фоновый режим
- Обработка отмененной фоновой задачи
- Как активировать приостановку, возобновление и фоновые события в приложениях UWP (при отладке)
- Мониторинг хода выполнения и завершения фоновой задачи
- Отложить выполнение приостановки приложения при помощи расширенной операции
- Регистрация фоновой задачи
- Реагирование на системные события с помощью фоновых задач
- Задание условий для выполнения фоновой задачи
- Обновить динамическую плитку с помощью фоновой задачи
- Использование триггера обслуживания