Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Замечание
На этой странице описывается модель фоновой задачи UWP (IBackgroundTask, BackgroundTaskBuilder). Для приложений WPF и Windows Forms используйте соответствующее руководство по фоновым задачам (Windows App SDK) для упакованных классических приложений (различные пространства имен, шаги регистрации и требования к упаковке MSIX) или рассмотрите использование Task Scheduler (без упаковки) или .NET Worker Services (упаковка не требуется).
В разделах этого раздела показано, как выполнять упрощенный код в фоновом режиме в ответ на триггеры. Фоновые задачи можно использовать для предоставления функциональных возможностей, когда приложение приостановлено или не запущено. Фоновые задачи также можно использовать для приложений связи в режиме реального времени, таких как VOIP, почта и мгновенные сообщения.
Воспроизведение мультимедиа в фоновом режиме
Начиная с Windows 10 версии 1607 воспроизведение звука в фоновом режиме гораздо проще. Дополнительные сведения см. в разделе "Воспроизведение мультимедиа" в фоновом режиме .
Фоновые задачи внутри процесса и вне процесса
Существует два подхода к реализации фоновых задач:
- В процессе: приложение и его фоновый процесс выполняются в том же процессе.
- Вне процесса: приложение и фоновый процесс выполняются в отдельных процессах.
В Windows 10 версии 1607 была введена поддержка фоновых задач в контексте их выполнения, чтобы упростить разработку таких задач. Но вы по-прежнему можете создавать фоновые задачи вне основного процесса. Инструкции по фоновым задачам см. в разделе "Рекомендации по написанию внутрипроцессной и внепроцессной фоновой задачи".
Фоновые задачи, выполняемые вне процесса, более устойчивы, потому что фоновый процесс не может привести к сбою вашего приложения, если что-то пойдет не так. Но устойчивость приходит за счет повышения сложности управления межпроцессным взаимодействием между приложением и фоновой задачей.
Фоновые задачи вне процесса реализуются как легковесные классы, которые реализуют интерфейс IBackgroundTask, выполняемый ОС в отдельном процессе (backgroundtaskhost.exe). Зарегистрируйте фоновую задачу с помощью класса BackgroundTaskBuilder. Имя класса используется для указания точки входа при регистрации фоновой задачи.
В Windows 10 версии 1607 можно включить фоновые действия без создания фоновой задачи. Вместо этого можно запустить фоновый код непосредственно внутри процесса приложения переднего плана.
Чтобы быстро приступить к работе с фоновыми задачами внутри процесса, см. статью "Создание и регистрация фоновой задачи в процессе".
Чтобы быстро приступить к работе с фоновыми задачами вне процесса, см. статью "Создание и регистрация фоновой задачи вне процесса".
Подсказка
Начиная с Windows 10, вам больше не нужно размещать приложение на экране блокировки в качестве необходимых условий для регистрации фоновой задачи для нее.
Фоновые задачи для системных событий
Приложение может реагировать на события, созданные системой, регистрируя фоновую задачу в классе SystemTrigger. Приложение может использовать любой из следующих триггеров системных событий (определенных в SystemTriggerType)
| Имя триггера | Описание |
|---|---|
| InternetAvailable | Интернет становится доступным. |
| NetworkStateChange | Произошло изменение в сети, например, изменение стоимости или условий связанности. |
| OnlineIdConnectedStateChange | Идентификатор в сети, связанный с учетной записью, изменяется. |
| SmsReceived | Новое SMS-сообщение получает установленное мобильное широкополосное устройство. |
| TimeZoneChange | Часовой пояс изменяется на устройстве (например, когда система настраивает часы для летнего времени). |
Дополнительные сведения см. в статье "Реагирование на системные события с помощью фоновых задач".
Условия фоновых задач
Вы можете управлять выполнением фоновой задачи, даже после ее активации, добавив условие. После активации фоновая задача не будет выполняться до тех пор, пока не будут выполнены все его условия. Можно использовать следующие условия (представленные перечислением SystemConditionType).
| Название условия | Описание |
|---|---|
| InternetAvailable | Интернет должен быть доступен. |
| InternetNotAvailable | Интернет должен быть недоступен. |
| SessionConnected | Сеанс должен быть подключен. |
| СеансОтключён | Сеанс должен быть отключен. |
| UserNotPresent | Пользователь должен быть прочь. |
| UserPresent | Пользователь должен присутствовать. |
Добавьте условие InternetAvailable в фоновую задачу BackgroundTaskBuilder.AddCondition для задержки запуска фоновой задачи до запуска сетевого стека. Это условие экономит мощность, так как фоновая задача не будет выполняться до тех пор, пока сеть не будет доступна. Это условие не обеспечивает активацию в режиме реального времени.
Если для фоновой задачи требуется сетевое подключение, установите IsNetworkRequested, чтобы гарантировать, что сеть остается активной во время выполнения фоновой задачи. Инструктирует инфраструктуру фоновых задач сохранять соединение с сетью во время выполнения задачи, даже если устройство перешло в режим подключенного ожидания. Если фоновая задача не задает IsNetworkRequested, фоновая задача не сможет получить доступ к сети в режиме ожидания подключения (например, при отключении экрана телефона). Дополнительные сведения об условиях фоновой задачи см. в разделе "Задание условий для выполнения фоновой задачи".
Требования к манифесту приложения
Прежде чем приложение сможет успешно зарегистрировать фоновую задачу, которая завершается вне процесса, она должна быть объявлена в манифесте приложения. Фоновые задачи, выполняемые в том же процессе, что и ведущее приложение, не должны объявляться в манифесте приложения. Дополнительные сведения см. в разделе "Объявление фоновых задач" в манифесте приложения.
Фоновые задачи
Следующие триггеры в режиме реального времени можно использовать для запуска упрощенного пользовательского кода в фоновом режиме:
| Триггер реального времени | Описание |
|---|---|
| Канал управления | С помощью ControlChannelTrigger фоновые задачи могут поддерживать подключение и получать сообщения в канале управления. Если приложение прослушивает сокет, можно использовать брокер сокетов вместо ControlChannelTrigger. Дополнительные сведения об использовании брокера сокетов см. в разделе SocketActivityTrigger. ControlChannelTrigger не поддерживается на телефоне Windows. |
| Таймер | Фоновые задачи могут выполняться так часто, как каждые 15 минут, и они могут выполняться в определенное время с помощью TimeTrigger. Дополнительные сведения см. в разделе "Запуск фоновой задачи" в таймере. |
| Пуш-уведомление | Фоновые задачи отвечают на PushNotificationTrigger для получения необработанных push-уведомлений. |
Примечание.
Универсальные приложения Windows должны вызывать RequestAccessAsync перед регистрацией любого из типов триггеров фона.
Чтобы обеспечить правильность работы вашего универсального приложения Windows после выпуска обновления, вызовите RemoveAccess, а затем RequestAccessAsync при запуске обновленного приложения. Дополнительные сведения см. в руководстве по фоновым задачам.
Ограничения на количество экземпляров триггеров: Существуют ограничения на количество экземпляров некоторых триггеров, которые могут зарегистрировать приложение. Приложение может зарегистрировать только ApplicationTrigger, MediaProcessingTrigger и DeviceUseTrigger один раз на экземпляр приложения. Если приложение превышает это ограничение, при регистрации возникнет исключение.
Триггеры системных событий
Перечисление SystemTriggerType представляет следующие системные триггеры событий:
| Имя триггера | Описание |
|---|---|
| UserPresent | Фоновая задача активируется при появлении пользователя. |
| UserAway | Фоновая задача активируется, когда пользователь отсутствует. |
| ControlChannelReset | Фоновая задача активируется при сбросе канала управления. |
| SessionConnected | Фоновая задача активируется при подключении сеанса. |
Следующее системное событие активирует сигнал, когда пользователь переместил приложение на экран блокировки или выключает его.
| Имя триггера | Описание |
|---|---|
| LockScreenApplicationAdded | Плитка приложения добавляется на экран блокировки. |
| LockScreenApplicationRemoved | Плитка приложения удаляется с экрана блокировки. |
Ограничения ресурсов фоновой задачи
Фоновые задачи являются легковесными. Обеспечение минимального уровня фонового выполнения обеспечивает оптимальное взаимодействие с приложениями переднего плана и жизненным циклом батареи. Это применяется путем применения ограничений ресурсов к фоновым задачам.
Фоновые задачи ограничены 30 секундами использования часов.
Ограничения памяти
Из-за ограничений ресурсов для устройств с низкой памятью фоновые задачи могут иметь ограничение памяти, определяющее максимальный объем памяти, который может использовать фоновую задачу. Если фоновая задача пытается выполнить операцию, превышающую это ограничение, операция завершится ошибкой и может вызвать исключение по недостатку памяти, которое задача может обработать. Если задача не обрабатывает исключение вне памяти, либо характер попытки операции заключается в том, что исключение из памяти не было создано, то задача будет немедленно завершена.
Вы можете использовать API MemoryManager для запроса текущего использования памяти и лимита, чтобы узнать о вашем ограничении (если оно есть), а также для отслеживания использования памяти фоновой задачей.
Ограничение на каждое устройство для приложений с фоновыми задачами для устройств с низкой памятью
На устройствах с ограниченной памятью существует предел на количество приложений, которые могут быть установлены на устройстве и одновременно запускать фоновые задачи. Если это число превышено, вызов RequestAccessAsync, который требуется для регистрации всех фоновых задач, завершится сбоем.
Экономия батареи
Если вы не исключите приложение, чтобы оно по-прежнему выполняло фоновые задачи и получать push-уведомления при включении экономии заряда, функция экономии батареи, если включена, предотвратит выполнение фоновых задач, когда устройство не подключено к внешней энергии, и батарея переходит ниже указанного объема оставшейся мощности. Это не помешает вам зарегистрировать фоновые задачи.
Однако для корпоративных приложений и приложений, которые не будут опубликованы в Microsoft Store, ознакомьтесь с Run в фоновом режиме неограниченно чтобы узнать, как использовать возможности для запуска фоновой задачи или расширенного сеанса выполнения в фоновом режиме на неопределенный срок.
Гарантии ресурсов фоновых задач для связи в режиме реального времени
Чтобы запретить квотам ресурсов вмешиваться в функции обмена данными в режиме реального времени, фоновые задачи с помощью ControlChannelTrigger и PushNotificationTrigger получают гарантированные квоты ресурсов ЦП для каждой выполняемой задачи. Квоты ресурсов, как упоминалось выше, остаются постоянными для этих фоновых задач.
Вашему приложению не нужно предпринимать никаких действий для получения гарантированной квоты ресурсов для ControlChannelTrigger и PushNotificationTrigger фоновых задач. Система всегда обрабатывает эти задачи как критически важные фоновые задачи.
Триггер обслуживания
Задачи обслуживания выполняются только в том случае, если устройство подключено к сети управления питанием. Дополнительные сведения см. в разделе "Использование триггера обслуживания".
Фоновые задачи для датчиков и устройств
Приложение может получить доступ к датчикам и периферийным устройствам из фоновой задачи с помощью класса DeviceUseTrigger. Этот триггер можно использовать для длительных операций, таких как синхронизация данных или мониторинг. В отличие от задач для системных событий, задача DeviceUseTrigger может быть активирована только во время работы приложения на переднем плане и не может быть задано никаких условий.
Это важно
Триггеры DeviceUseTrigger и DeviceServicingTrigger нельзя использовать с встраиваемыми фоновыми задачами.
Некоторые критически важные операции устройства, такие как длительные обновления встроенного ПО, нельзя выполнять с помощью DeviceUseTrigger. Такие операции можно выполнять только на компьютере, и только привилегированным приложением, использующим DeviceServicingTrigger. Привилегированное приложение — это приложение, которое производитель устройства авторизован для выполнения этих операций. Метаданные устройства используются для указания приложения, если таковые имеются, в качестве привилегированного приложения для устройства. Дополнительные сведения см. в разделе Синхронизация устройства и обновление приложений для устройств Microsoft Store
Управление фоновыми задачами
Фоновые задачи могут сообщать приложению о ходе выполнения, завершении и отмене с помощью событий и локального хранилища. Приложение также может перехватывать исключения, создаваемые фоновой задачей, и управлять регистрацией фоновых задач во время обновлений приложения. Дополнительные сведения см. в разделе:
Обработка отмененной фоновой задачи
Мониторинг хода выполнения и завершения фоновой задачи
Проверьте регистрацию фоновой задачи во время запуска приложения. Убедитесь, что негруппированные фоновые задачи приложения присутствуют в BackgroundTaskBuilder.AllTasks. Повторно зарегистрируйте те, которые отсутствуют. Отмена регистрации всех задач, которые больше не нужны. Это гарантирует, что все регистрации фоновых задач обновляются при каждом запуске приложения.
Связанные темы
Концептуальное руководство по многозадачности в Windows 10
Руководство по связанным фоновым задачам
- Рекомендации по фоновым задачам
- Получите доступ к датчикам и устройствам из фоновой задачи
- Создание и регистрация фоновой задачи внутри процесса
- Создание и регистрация фоновой задачи вне процесса
- Преобразование фоновой задачи вне процесса в фоновую задачу внутри процесса
- Отладка фоновой задачи
- Укажите фоновые задачи в манифесте приложения
- регистрация фоновой задачи группы
- Обработка отмененной фоновой задачи
- Как активировать приостановку, возобновление и фоновые события в приложениях UWP (при отладке)
- Мониторинг хода выполнения и завершения фоновой задачи
- Воспроизведение мультимедиа в фоновом режиме
- Регистрация фоновой задачи
- Реагирование на системные события с помощью фоновых задач
- выполнить фоновую задачу на таймере
- Запуск фоновой задачи при обновлении приложения UWP
- Запускать в фоновом режиме бессрочно
- Задание условий для выполнения фоновой задачи
- Активация фоновой задачи из приложения
- Обновить динамическую плитку с помощью фоновой задачи
- Использование триггера обслуживания