Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Это важно
Метаданные устройства являются устаревшими и будут удалены в будущем выпуске Windows. Сведения о замене этой функции см. в разделе Метаданные контейнера пакетов драйверов.
Приложение UWP может использовать фоновую задачу устройства для синхронизации данных на периферийном устройстве. Если приложение связано с метаданными устройства, приложение устройства UWP также может использовать агент фона устройства для выполнения обновлений устройств, таких как обновления встроенного ПО. Фоновые агенты устройства подпадают под действие политик, которые обеспечивают согласие пользователя и помогают сохранить заряд батареи в процессе синхронизации и обновления устройств.
Для выполнения операций синхронизации и обновления устройств создайте фоновую задачу устройства, которая использует DeviceUseTrigger и DeviceServicingTrigger соответственно. Сведения о создании фоновой задачи устройства с помощью примера пользовательского USB-устройства см. в статье "Создание фоновой задачи устройства".
API устройства среды выполнения Windows не требуют метаданных устройства. Это означает, что ваше приложение не должно быть приложением устройства UWP для их использования. Приложения UWP могут использовать эти API для доступа к USB, устройствам интерфейса человека (HID), устройствам Bluetooth и т. д. Дополнительные сведения см. в разделе "Интеграция устройств".
Обзор фоновой задачи устройства
Когда пользователи перемещают приложение UWP вне экрана, Windows приостанавливает работу приложения в памяти, позволяя другому приложению иметь передний план. Когда приложение приостановлено, оно находится в памяти, но Windows прекратил его работу.
Все текущие операции устройства, такие как синхронизация и обновление, прерваны без помощи фоновой задачи устройства. Windows предоставляет два триггера фоновой задачи для решения этой проблемы: DeviceUseTrigger и DeviceServicingTrigger. Эти триггеры позволяют приложению выполнять длительные операции синхронизации и обновления на периферийном устройстве безопасно в фоновом режиме, даже если ваше приложение приостановлено. Дополнительные сведения о приостановке приложений см. в разделе "Запуск", "Возобновление" и "Многозадачность".
Триггер фоновой задачи | Требуются метаданные устройства | Описание |
---|---|---|
DeviceUseTrigger | нет | Обеспечивает выполнение длительных операций синхронизации с или на периферийное устройство во время приостановки вашего приложения. Синхронизация устройства в фоновом режиме требует, чтобы пользователь одобрил фоновую синхронизацию приложения. Устройство также должно быть подключено или синхронизировано с компьютером, с активными операциями ввода-вывода, и максимально разрешенная продолжительность фоновой работы составляет 10 минут. Дополнительные сведения о применении политик описаны далее в этой статье. |
DeviceServicingTrigger | Да | Включает длительные обновления устройств, например передачу настроек или обновления встроенного ПО, даже когда ваше приложение приостановлено. При обновлении устройства в фоновом режиме требуется утверждение пользователя при каждом использовании фоновой задачи. В отличие от фоновой задачи DeviceUseTrigger, фоновая задача DeviceServicingTrigger позволяет перезагружать и отключать устройство и разрешает не более 30 минут фонового действия. Дополнительные сведения о применении политик описаны далее в этой статье. |
DeviceServicingTrigger требует метаданных устройства, так как приложение должно быть указано как привилегированное приложение для выполнения операций обновления устройства.
Привилегии приложения
Привилегированное приложение может выполнять некоторые критически важные операции устройства, такие как длительные обновления устройств. Привилегированное приложение — это приложение, которое производитель устройства авторизует для выполнения этих операций. Метаданные устройства указывают, какое приложение, если есть, назначается в качестве привилегированного приложения для устройства.
При создании метаданных устройства с помощью мастера метаданных устройства укажите ваше приложение на странице Укажите сведения о приложении устройства UWP. Дополнительные сведения см. в разделе "Шаг 2. Создание метаданных устройства для приложения устройства UWP".
Поддерживаемые протоколы
Фоновые задачи устройства, использующие DeviceUseTrigger и DeviceServicingTrigger, позволяют приложению взаимодействовать с периферийными устройствами по определенным протоколам. Задачи, активированные системой, обычно используемые приложениями UWP, не поддерживают эти протоколы.
Протокол | DeviceServicingTrigger | DeviceUseTrigger | Системные триггеры |
---|---|---|---|
USB |
![]() |
![]() |
![]() |
ПРЯТАТЬ |
![]() |
![]() |
![]() |
Bluetooth RFCOMM |
![]() |
![]() |
![]() |
Bluetooth GATT |
![]() |
![]() |
![]() |
MTP |
![]() |
![]() |
![]() |
Проводная сеть |
![]() |
![]() |
![]() |
Сеть Wi-Fi |
![]() |
![]() |
![]() |
IDeviceIOControl |
![]() |
![]() |
![]() |
Регистрация фоновых задач в манифесте пакета приложения
Приложение выполняет операции синхронизации и обновления в коде, который выполняется в фоновой задаче. Этот код внедрен в класс среды выполнения Windows, реализующий IBackgroundTask (или на выделенной странице JavaScript для приложений JavaScript). Чтобы использовать фоновую задачу устройства, приложение должно объявить его в файле манифеста приложения переднего плана, как и для фоновых задач, активированных системой.
В этом примере файла манифеста пакета приложения DeviceLibrary.SyncContent и DeviceLibrary.UpdateFirmware являются точками входа из приложения переднего плана. DeviceLibrary.SyncContent — это точка входа для фоновой задачи, которая использует DeviceUseTrigger. DeviceLibrary.UpdateFirmware — это точка входа для фоновой задачи, которая использует DeviceServicingTrigger.
<Extensions>
<Extension Category="windows.backgroundTasks" EntryPoint="DeviceLibrary.SyncContent">
<BackgroundTasks>
<m2:Task Type="deviceUse" />
</BackgroundTasks>
</Extension>
<Extension Category="windows.backgroundTasks" EntryPoint="DeviceLibrary.UpdateFirmware">
<BackgroundTasks>
<m2:Task Type="deviceServicing" />
</BackgroundTasks>
</Extension>
</Extensions>
Использование устройства с фоновыми задачами
Чтобы разработать приложение, чтобы воспользоваться преимуществами фоновых задач DeviceUseTrigger и DeviceServicingTrigger, выполните этот базовый набор шагов. Дополнительные сведения о фоновых задачах см. в статье "Поддержка приложения с фоновыми задачами".
Приложение регистрирует фоновую задачу в манифесте приложения и внедряет фоновый код задачи в класс среды выполнения Windows, который реализует IBackgroundTask или на выделенной странице JavaScript для приложений JavaScript.
При запуске вашего приложения оно создаст и настроит объект триггера устройства соответствующего типа, либо DeviceUseTrigger, либо DeviceServicingTrigger, и сохранит экземпляр триггера для дальнейшего использования.
Приложение проверяет, была ли фоновая задача зарегистрирована ранее и, если нет, регистрирует ее в триггере устройства. Приложение не может задавать условия для задачи, связанной с этим триггером.
Когда приложению необходимо активировать фоновую задачу, он вызывает метод активации RequestAsync в объекте триггера устройства.
Фоновая задача не регулируется, как и другие системные фоновые задачи (нет квоты времени ЦП), но выполняется с меньшим приоритетом, чтобы обеспечить скорость реагирования приложений переднего плана.
В зависимости от типа триггера Windows проверяет, выполнены ли необходимые политики, включая запрос согласия пользователя на операцию перед запуском фоновой задачи.
Windows отслеживает системные условия и среду выполнения задач, а при необходимости отменяет задачу, если необходимые условия больше не выполнены.
Когда фоновые задачи сообщают о ходе выполнения или завершении, приложение получает эти события через ход выполнения и завершенные события для зарегистрированной задачи.
Важные моменты, которые следует учитывать при использовании фоновых задач устройства
Возможность программно активировать фоновые задачи, использующие DeviceUseTrigger и DeviceServicingTrigger, ограничена только фоновыми задачами устройства.
Windows применяет определенные политики, чтобы обеспечить согласие пользователя при обновлении периферийных устройств. Для сохранения заряда аккумулятора пользователя при синхронизации и обновлении периферийных устройств применяются дополнительные политики.
Windows может отменить фоновые задачи, использующие DeviceUseTrigger и DeviceServicingTrigger, если определенные требования к политике больше не выполняются, включая максимальное время фонового времени (время настенные часы). Важно учитывать эти требования к политике при использовании этих фоновых задач для взаимодействия с периферийным устройством.
Подсказка
Чтобы узнать, как работают эти фоновые задачи, скачайте пример. В примере пользовательского USB-устройства показана фоновая задача, которая выполняет синхронизацию устройств с DeviceUseTrigger.
Согласие пользователя
Когда приложение использует DeviceUseTrigger или DeviceServicingTrigger, Windows применяет политики, чтобы гарантировать, что пользователь предоставляет приложению разрешение на доступ к устройству в фоновом режиме для синхронизации и обновления содержимого. Политики также применяются для сохранения жизни батареи пользователя при синхронизации и обновлении периферийных устройств.
Согласие пользователя синхронизации устройств
Фоновая задача, использующая DeviceUseTrigger, требует однократного согласия пользователя, позволяющего приложению синхронизироваться в фоновом режиме. Это согласие сохраняется для каждого приложения и модели на устройство. Пользователь дает согласие на предоставление приложению доступа к устройству в фоновом режиме так же, как и согласие на предоставление приложению доступа к устройству, когда приложение находится на переднем плане.
В следующем примере приложение с именем Tailspin Toys получает разрешение пользователя на синхронизацию в фоновом режиме.
Если пользователи передумают позже, они могут отозвать разрешения в параметрах.
Согласие пользователя на обновление устройства
В отличие от фоновых задач, использующих DeviceUseTrigger, те, которые используют фоновую задачу DeviceServicingTrigger, требуют согласия пользователя при каждом запуске фоновой задачи. Это согласие не хранится так, как это для DeviceUseTrigger. Это связано с тем, что обновления встроенного ПО устройства включают операции с более высоким риском и требуют больше времени для завершения.
Windows также предоставляет пользователям сведения об обновлениях устройств. Это включает предупреждения о том, что устройство должно быть подключено в течение обновления, и убедитесь, что компьютер заряжен. Windows также показывает приблизительное время выполнения операции, если приложение предоставляет его.
Ограничения частоты и переднего плана
Нет ограничений на частоту, с помощью которой ваше приложение может инициировать операции, но приложение может запускать только одну фоновую операцию DeviceUseTrigger или DeviceServicingTrigger за раз (это не влияет на другие типы фоновых задач) и может инициировать фоновую задачу только в то время как приложение находится на переднем плане. Если приложение не находится на переднем плане, оно не может инициировать фоновую задачу с помощью DeviceUseTrigger или DeviceServicingTrigger. Приложение не может инициировать вторую фоновую задачу устройства до завершения первой фоновой задачи.
Политики фоновых задач устройства
Windows применяет политики, когда приложение использует фоновую задачу устройства. Если эти политики не выполнены, может быть отменена фоновая задача с помощью DeviceUseTrigger или DeviceServicingTrigger. Важно учитывать эти требования политики при использовании фоновых задач устройства для взаимодействия с периферийным устройством.
Политики запуска задач
Эта таблица указывает, какие политики запуска задач применяются к каждому триггеру фоновой задачи.
Политика | DeviceServicingTrigger | DeviceUseTrigger |
---|---|---|
Приложение UWP находится на переднем плане при активации фоновой задачи. |
![]() |
![]() |
Ваше устройство подключено к системе (или находится в зоне действия для беспроводного устройства). |
![]() |
![]() |
Фоновая задача потребляет 400 мс времени ЦП (при условии, что ЦП 1 ГГц) каждую минуту при блокировке экрана или каждые 5 минут, когда экран не заблокирован. Несоблюдение этой политики может привести к отмене вашей задачи. |
![]() |
![]() |
Ваше устройство доступно для приложения с помощью периферийных API устройства (API среды выполнения Windows для USB, HID, Bluetooth и т. д.). Если приложение не может получить доступ к устройству, доступ к фоновым задачам запрещен. |
![]() |
![]() |
Точка входа в фоновую задачу, предоставляемая приложением, зарегистрирована в манифесте пакета приложения. |
![]() |
![]() |
Пользователь разрешил задаче продолжить выполнение. | Каждый раз. | В первый раз, а затем управляется разрешениями приложения. |
Оценка времени, предоставляемая приложением, составляет менее 30 минут. |
![]() |
![]() |
Приложение указывается как привилегированное приложение для устройства. (В метаданных устройства контейнера устройства должно быть полное сопоставление идентификатора приложения с привилегированным списком приложений.) |
![]() |
![]() |
Компьютер имеет более 33% остаточной емкости батареи или подключен к сетевому питанию. |
![]() |
![]() |
Для каждого типа операции выполняется только одна фоновая задача устройства. |
![]() |
![]() |
Проверки политики в процессе исполнения
Windows применяет следующие требования политики среды выполнения во время выполнения задачи в фоновом режиме. Если какие-либо из требований среды выполнения перестают быть верными, Windows отменит фоновую задачу устройства.
Эта таблица указывает, какие политики среды выполнения применяются к каждому триггеру фоновой задачи.
Проверка политики | DeviceServicingTrigger | DeviceUseTrigger |
---|---|---|
Ограничение по реальному времени выполнения — максимальное время, в течение которого задача приложения может выполняться в фоновом режиме. | 30 минут | 10 минут |
Устройство подключено к системе (или находится в зоне действия беспроводной сети). |
![]() |
Применяется проверка политики ![]() |
Задача выполняет регулярные операции ввода-вывода на устройство (1 ввода-вывода каждые 5 секунд). |
![]() |
Применяется проверка политики ![]() |
Приложение не отменило задачу. |
![]() |
Применяется проверка политики ![]() |
Программа не закрылась. |
![]() |
Применяется проверка политики ![]() |
Лучшие практики
Ниже приведены рекомендации по использованию приложений устройств UWP, использующих фоновые задачи устройства.
Модель программирования фоновых задач устройства
Использование фоновых задач DeviceUseTrigger или DeviceServicingTrigger из приложения гарантирует, что все операции синхронизации или обновления устройств, запущенные из приложения переднего плана, продолжают работать в фоновом режиме, если пользователи переключают приложения и приложение переднего плана приостановлено Windows. Рекомендуется следовать этой общей модели для регистрации, активации и отмены регистрации фоновых задач:
Зарегистрируйте фоновую задачу перед запросом триггера.
Подключите обработчики событий прогресса и завершения к триггеру. Когда приложение возвращается из состояния приостановки работы, Windows предоставляет вашему приложению любые события, такие как ход выполнения или завершение в очереди, которые можно использовать для определения статуса фоновых задач.
Закройте все открытые объекты устройств при активации фоновых задач DeviceUseTrigger или DeviceServicingTrigger, чтобы эти устройства были свободны для открытия и использования фоновой задачей.
Зарегистрируйте триггер.
После завершения задачи отмените регистрацию фоновой задачи. После завершения фоновой задачи можно отменить регистрацию фоновых задач и повторно открыть устройство и регулярно использовать его из приложения UWP.
Зарегистрируйте события отмены в вашем классе фоновых задач. Регистрация событий отмены позволяет коду фоновой задачи корректно остановить выполнение этой задачи при её отмене Windows или приложением переднего плана.
При выходе приложения (а не приостановке), отмените регистрацию и отмените все выполняемые задачи.
Когда приложение завершает работу, отмените регистрацию и отмените все выполняемые задачи.
Когда приложение завершает работу, фоновые задачи отменяются, а все существующие обработчики событий отключены от существующих фоновых задач. Это предотвращает определение состояния фоновых задач. Снятие регистрации и отмена фоновой задачи позволит вашему коду отмены корректно остановить фоновые задачи.
Подсказка
Подробные сведения о том, как это делается с помощью примера пользовательского USB-устройства, см. в разделе "Создание фоновой задачи устройства".
Отмена фоновой задачи
Чтобы отменить задачу, выполняемую в фоновом режиме из приложения переднего плана, используйте метод Unregister в объекте BackgroundTaskRegistration, который вы используете в приложении, чтобы зарегистрировать фоновую задачу DeviceUseTrigger или DeviceServicingTrigger . Отмена регистрации фоновой задачи с использованием метода Unregister в BackgroundTaskRegistration приводит к тому, что инфраструктура фоновой задачи отменяет вашу фоновую задачу.
Метод Unregister также принимает логическое значение true или false для указания на то, следует ли отменить текущие выполняемые экземпляры вашей фоновой задачи, не позволяя им завершиться. Дополнительные сведения см. в справочнике по API для BackgroundTaskRegistration.Unregister.