Реагирование на системные события с помощью фоновых задачRespond to system events with background tasks

Важные APIImportant APIs

Узнайте, как создать фоновую задачу, которая реагирует на события системтригжер .Learn how to create a background task that responds to SystemTrigger events.

В данном разделе предполагается, что для вашего приложения создан класс фоновой задачи, которую требуется запустить в ответ на событие, активированное системой, например при появлении доступа к Интернету или входе пользователя в систему.This topic assumes that you have a background task class written for your app, and that this task needs to run in response to an event triggered by the system such as when internet availability changes or the user logging in. В этом разделе мы подробно рассмотрим класс SystemTrigger.This topic focuses on the SystemTrigger class. Подробнее о написании класса фоновой задачи см. в статьях Создание и регистрация внутрипроцессной фоновой задачи и Создание и регистрация внепроцессной фоновой задачи.More information on writing a background task class is available in Create and register an in-process background task or Create and register an out-of-process background task.

Создание объекта SystemTriggerCreate a SystemTrigger object

Создайте в коде своего приложения новый объект SystemTrigger.In your app code, create a new SystemTrigger object. Первый параметр, triggerType, задает тип триггера системного события, который будет активировать эту фоновую задачу.The first parameter, triggerType, specifies the type of system event trigger that will activate this background task. Список типов событий см. в разделе SystemTriggerType.For a list of event types, see SystemTriggerType.

Второй параметр, OneShot, указывает, будет ли фоновая задача выполняться только один раз при следующем возникновении системного события или она будет выполняться всякий раз при возникновении этого события, пока не отменена регистрация задачи.The second parameter, OneShot, specifies whether the background task will run only once the next time the system event occurs or every time the system event occurs until the task is unregistered.

Следующий код указывает, что фоновая задача выполняется при появлении доступа к Интернету:The following code specifies that the background task runs whenever the Internet becomes available:

SystemTrigger internetTrigger = new SystemTrigger(SystemTriggerType.InternetAvailable, false);
Windows::ApplicationModel::Background::SystemTrigger internetTrigger{
    Windows::ApplicationModel::Background::SystemTriggerType::InternetAvailable, false};
SystemTrigger ^ internetTrigger = ref new SystemTrigger(SystemTriggerType::InternetAvailable, false);

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

Зарегистрируйте фоновую задачу, вызвав функцию регистрации фоновой задачи.Register the background task by calling your background task registration function. Узнать больше о регистрации фоновых задач можно в разделе Регистрация фоновой задачи.For more information on registering background tasks, see Register a background task.

Следующий код регистрирует фоновую задачу для фонового процесса, выполняемого вне процесса.The following code registers the background task for a background process that runs out-of-process. Если вы вызываете фоновую задачу, которая выполняется в том же процессе, что и приложение-хост, задавать entrypoint не требуется:If you were calling a background task that runs in the same process as the host app, you would not set entrypoint:

string entryPoint = "Tasks.ExampleBackgroundTaskClass"; // Namespace name, '.', and the name of the class containing the background task
string taskName   = "Internet-based background task";

BackgroundTaskRegistration task = RegisterBackgroundTask(entryPoint, taskName, internetTrigger, exampleCondition);
std::wstring entryPoint{ L"Tasks.ExampleBackgroundTaskClass" }; // don't set for in-process background tasks.
std::wstring taskName{ L"Internet-based background task" };

Windows::ApplicationModel::Background::BackgroundTaskRegistration task{
    RegisterBackgroundTask(entryPoint, taskName, internetTrigger, exampleCondition) };
String ^ entryPoint = "Tasks.ExampleBackgroundTaskClass"; // don't set for in-process background tasks
String ^ taskName   = "Internet-based background task";

BackgroundTaskRegistration ^ task = RegisterBackgroundTask(entryPoint, taskName, internetTrigger, exampleCondition);

Примечание

Универсальная платформа Windows приложения должны вызывать рекуестакцессасинк перед регистрацией любых типов триггеров в фоновом режиме.Universal Windows Platform apps must call RequestAccessAsync before registering any of the background trigger types.

Чтобы универсальное приложение для Windows продолжало правильно работать после выпуска обновления, необходимо вызвать метод RemoveAccess, а затем — метод RequestAccessAsync при запуске приложения после обновления.To ensure that your Universal Windows app continues to run properly after you release an update, you must call RemoveAccess and then call RequestAccessAsync when your app launches after being updated. Дополнительные сведения см. в разделе Руководство по фоновым задачам.For more information, see Guidelines for background tasks.

Примечание

Параметры регистрации фоновых задач проверяются во время регистрации.Background task registration parameters are validated at the time of registration. Если какие-либо из параметров регистрации недопустимы, возвращается ошибка.An error is returned if any of the registration parameters are invalid. Убедитесь, что ваше приложение корректно обрабатывает сценарии, в которых регистрация фоновой задачи завершается ошибкой. Если работа вашего приложения зависит от наличия допустимого объекта регистрации после попытки регистрации задачи, то оно может дать сбой.Ensure that your app gracefully handles scenarios where background task registration fails - if instead your app depends on having a valid registration object after attempting to register a task, it may crash.  

RemarksRemarks

Чтобы увидеть регистрацию фоновой задачи в действии, скачайте образец фоновой задачи.To see background task registration in action, download the background task sample.

Фоновые задачи можно запускать в ответ на события SystemTrigger и MaintenanceTrigger, но все равно необходимо объявить фоновые задачи в манифесте приложения.Background tasks can run in response to SystemTrigger and MaintenanceTrigger events, but you still need to Declare background tasks in the application manifest. Необходимо также вызвать RequestAccessAsync перед регистрацией фоновой задачи любого типа.You must also call RequestAccessAsync before registering any background task type.

Приложения способны регистрировать фоновые задачи, которые выполняются в ответ на события TimeTrigger, PushNotificationTrigger и NetworkOperatorNotificationTrigger. Это позволяет им поддерживать связь с пользователем в реальном времени, даже когда приложение не находится на переднем плане.Apps can register background tasks that respond to TimeTrigger, PushNotificationTrigger, and NetworkOperatorNotificationTrigger events, enabling them to provide real-time communication with the user even when the app is not in the foreground. Дополнительные сведения см. в разделе Поддержка приложения с фоновыми задачами.For more information, see Support your app with background tasks.