Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
DeviceUseTrigger позволяет вашим приложениям универсального приложения Windows получать доступ к датчикам и периферийным устройствам в фоновом режиме, даже если приложение переднего плана приостановлено. Например, в зависимости от того, где работает ваше приложение, он может использовать фоновую задачу для синхронизации данных с устройствами или датчиками мониторинга. Чтобы помочь сохранить заряд батареи и получить соответствующее согласие пользователя, использование DeviceUseTrigger подчиняется политикам, описанным в этом разделе.
Чтобы получить доступ к датчикам или периферийным устройствам в фоновом режиме, создайте фоновую задачу, которая использует DeviceUseTrigger. Пример, показывающий, как это делается на компьютере, см. в примере пользовательского USB-устройства. Для примера на телефоне см. образец фоновых датчиков.
Это важно
DeviceUseTrigger нельзя использовать с фоновыми задачами, работающими внутри процесса. Сведения в этом разделе применяются только к фоновым задачам, которые выполняются вне процесса.
Обзор фоновой задачи устройства
Когда приложение больше не отображается пользователю, Windows приостанавливает или завершает работу приложения для освобождения памяти и ресурсов ЦП. Это позволяет другим приложениям работать на переднем плане и сократить потребление батареи. Когда это происходит, без помощи фоновой задачи все текущие события данных будут потеряны. Windows предоставляет триггер фоновой задачи, DeviceUseTrigger, позволяющий вашему приложению безопасно выполнять длительные операции синхронизации и мониторинга на устройствах и датчиках в фоновом режиме, даже если оно приостановлено. Дополнительные сведения о жизненном цикле приложений см. в разделе Запуск, возобновление и фоновые задачи. Дополнительные сведения о фоновых задачах см. в статье Поддержка приложения с помощью фоновых задач.
примечание В универсальном приложении Windows синхронизация устройства в фоновом режиме требует, чтобы пользователь одобрил фоновую синхронизацию приложения. Устройство также должно быть подключено к компьютеру или сопряжено с ним, с активным вводом-выводом и допускается не более 10 минут фонового действия. Дополнительные сведения о применении политик описаны далее в этом разделе.
Ограничение: критически важные операции устройства
Некоторые критически важные операции устройства, такие как длительные обновления встроенного ПО, не могут выполняться с помощью DeviceUseTrigger. Такие операции можно выполнять только на компьютере, и только привилегированным приложением, использующим DeviceServicingTrigger. Привилегированное приложение — это приложение, которому производитель устройства предоставил разрешение на выполнение этих операций. Метаданные устройства используются для указания приложения, если таковые имеются, в качестве привилегированного приложения для устройства. Дополнительные сведения см. в синхронизации и обновлении приложений устройств Microsoft Store.
Протоколы и API, поддерживаемые в фоновой задаче DeviceUseTrigger
Фоновые задачи, использующие DeviceUseTrigger позволяют приложению обмениваться данными по нескольким протоколам или API, большинство из которых не поддерживается системными фоновыми задачами. Следующие функции поддерживаются в универсальном приложении Для Windows.
Регистрация фоновых задач в манифесте пакета приложения
Приложение будет выполнять операции синхронизации и обновления в коде, который выполняется в фоновой задаче. Этот код внедрен в класс среды выполнения Windows, который реализует IBackgroundTask (или на выделенной странице JavaScript для приложений JavaScript). Чтобы использовать фоновую задачу DeviceUseTrigger, приложение должно объявить её в файле манифеста приложения переднего плана, так же, как это делается для фоновых задач, активируемых системой.
В этом примере файла манифеста пакета приложения DeviceLibrary.SyncContent служит точкой входа для фоновой задачи, использующей DeviceUseTrigger.
<Extensions>
<Extension Category="windows.backgroundTasks" EntryPoint="DeviceLibrary.SyncContent">
<BackgroundTasks>
<m2:Task Type="deviceUse" />
</BackgroundTasks>
</Extension>
</Extensions>
Общие сведения об использовании DeviceUseTrigger
Чтобы использовать DeviceUseTrigger, выполните следующие основные действия. Дополнительные сведения о фоновых задачах см. в разделе Поддержка приложения с помощью фоновых задач.
- Приложение регистрирует фоновую задачу в манифесте приложения и внедряет фоновый код задачи в класс среды выполнения Windows, который реализует IBackgroundTask или на выделенной странице JavaScript для приложений JavaScript.
- При запуске приложения он создаст и настроит объект триггера типа DeviceUseTriggerи сохранит экземпляр триггера для дальнейшего использования.
- Приложение проверяет, была ли фоновая задача зарегистрирована ранее и, если нет, регистрирует ее в триггере. Обратите внимание, что приложению не разрешено задавать условия для задачи, связанной с этим триггером.
- Когда приложению необходимо активировать фоновую задачу, сначала необходимо вызвать RequestAccessAsync, чтобы проверить, может ли приложение запросить фоновую задачу.
- Если приложение может запросить фоновую задачу, он вызывает метод активации RequestAsync на объекте триггера устройства.
- Ваша фоновая задача не подлежит регулированию, как другие системные фоновые задачи (нет квоты на использование процессора), но будет выполняться с пониженным приоритетом, чтобы обеспечить быструю реакцию приложений на переднем плане.
- После этого Windows проверит, исходя из типа триггера, что были выполнены необходимые политики, включая запрос согласия пользователя на операцию перед началом фоновой задачи.
- Windows отслеживает системные условия и среду выполнения задач, а при необходимости отменяет задачу, если необходимые условия больше не выполнены.
- Когда фоновые задачи сообщают о ходе выполнения или завершении, ваше приложение получит эти события через ход выполнения и завершенные события для зарегистрированной задачи.
Важные Учитывайте следующие важные моменты при использовании DeviceUseTrigger:
Возможность программно активировать фоновые задачи, использующие DeviceUseTrigger, впервые появилась в Windows 8.1 и Windows Phone 8.1.
Некоторые политики применяются Windows, чтобы обеспечить согласие пользователя при обновлении периферийных устройств на компьютере.
При синхронизации и обновлении периферийных устройств применяются дополнительные политики для сохранения времени работы аккумулятора пользователя.
Фоновые задачи, использующие DeviceUseTrigger, могут быть отменены Windows, если определенные требования политики больше не выполняются, включая максимальную длительность выполнения в фоновом режиме (время по настенным часам). Важно учитывать эти требования к политике при использовании этих фоновых задач для взаимодействия с периферийным устройством.
Подсказка Чтобы понять, как работают эти фоновые задачи, скачайте пример. Пример, показывающий, как это делается на компьютере, см. в примере пользовательского USB-устройства. Для примера на телефоне см. образец фоновых датчиков.
Ограничения частоты и переднего плана
Нет ограничений на частоту, с помощью которой приложение может инициировать операции, но приложение может запускать только одну DeviceUseTrigger фоновую операцию за раз (это не влияет на другие типы фоновых задач), и может инициировать фоновую задачу только в то время как приложение находится на переднем плане. Если приложение не находится на переднем плане, оно не может инициировать фоновую задачу с DeviceUseTrigger. Приложение не может инициировать вторую DeviceUseTrigger фоновую задачу до завершения первой фоновой задачи.
Ограничения устройств
Хотя каждое приложение ограничено регистрацией и выполнением только одной DeviceUseTrigger фоновой задачей, устройство (на котором работает приложение), может разрешить нескольким приложениям зарегистрировать и запустить DeviceUseTrigger фоновых задач. В зависимости от устройства может быть ограничение на общее количество DeviceUseTrigger фоновых задач всех приложений. Это помогает сохранить батарею на устройствах с ограниченными ресурсами. Дополнительные сведения см. в следующей таблице.
Из одной DeviceUseTrigger фоновой задачи приложение может получить доступ к неограниченному количеству периферийных устройств или датчиков — ограничиваясь только поддерживаемыми API и протоколами, перечисленными в предыдущей таблице.
Политики фоновых задач
Windows применяет политики, когда приложение использует фоновую задачу DeviceUseTrigger . Если эти политики не выполнены, фоновая задача может быть отменена. Важно учитывать эти требования политики при использовании этого типа фоновой задачи для взаимодействия с устройствами или датчиками.
Политики запуска задач
Эта таблица указывает, какие политики запуска задач применяются к универсальному приложению Для Windows.
Политика | DeviceUseTrigger в универсальном приложении для Windows |
---|---|
Приложение находится на переднем плане при активации фоновой задачи. |
![]() |
Устройство подключено к системе (или находится в зоне действия для беспроводного устройства). |
![]() |
Устройство доступно для приложения с помощью поддерживаемых периферийных API устройства (API среды выполнения Windows для USB, HID, Bluetooth, датчиков и т. д.). Если приложение не может получить доступ к устройству или датчику, доступ к фоновой задаче запрещен. |
![]() |
Точка входа в фоновую задачу, предоставляемая приложением, зарегистрирована в манифесте пакета приложения. |
![]() |
Для каждого приложения выполняется только одна DeviceUseTrigger фоновая задача. |
![]() |
Максимальное количество DeviceUseTrigger фоновых задач еще не достигнуто на устройстве (на котором работает ваше приложение). | семейство настольных устройств: можно зарегистрировать и запустить параллельно неограниченное количество задач. семейство мобильных устройств: 1 задача на устройстве размером 512 МБ; в противном случае 2 задачи можно зарегистрировать и запустить параллельно. |
Максимальное количество периферийных устройств или датчиков, к которым ваше приложение может получить доступ из одной DeviceUseTrigger фоновой задачи при использовании поддерживаемых API/протоколов. | без ограничений |
Фоновая задача потребляет 400 мс времени ЦП (при условии, что ЦП 1 ГГц) каждую минуту при блокировке экрана или каждые 5 минут, когда экран не заблокирован. Несоблюдение этой политики может привести к отмене вашей задачи. |
![]() |
Проверки политики в процессе исполнения
Windows применяет следующие требования политики среды выполнения во время выполнения задачи в фоновом режиме. Если какие-либо из требований среды выполнения перестают быть верными, Windows отменит фоновую задачу устройства.
Эта таблица указывает, какие политики среды выполнения применяются к универсальному приложению Windows.
Проверка политики | DeviceUseTrigger в универсальном приложении для Windows |
---|---|
Устройство подключено к системе (или находится в зоне действия для беспроводного устройства). | Применяется проверка политики ![]() |
Задача выполняет регулярные операции ввода-вывода на устройство (1 ввода-вывода каждые 5 секунд). | Применяется проверка политики ![]() |
Приложение не отменило задачу. | Применяется проверка политики ![]() |
Ограничение времени исполнения — общее время, в течение которого задача вашего приложения может выполняться в фоновом режиме. | семейство настольных устройств: 10 минут. семейство мобильных устройств: нет ограничения времени. Для экономии ресурсов не более 1 или 2 задач могут выполняться одновременно. |
Приложение не завершило работу. | Применяется проверка политики ![]() |
Лучшие практики
Ниже приведены рекомендации для приложений, использующих фоновые задачи DeviceUseTrigger.
Программирование фоновой задачи
Использование фоновой задачи DeviceUseTrigger в вашем приложении гарантирует, что любые операции синхронизации или мониторинга, начатые из активного приложения, продолжат работать в фоновом режиме, если пользователи переключаются между приложениями и ваше приложение будет приостановлено системой Windows. Рекомендуется следовать этой общей модели для регистрации, активации и отмены регистрации фоновых задач:
Вызовите RequestAccessAsync, чтобы проверить, может ли приложение запросить фоновую задачу. Это необходимо сделать перед регистрацией фоновой задачи.
Зарегистрируйте фоновую задачу перед запросом триггера.
Подключите обработчики событий прогресса и завершения к триггеру. Когда ваше приложение возвращается из приостановки, Windows предоставит вашему приложению все события хода выполнения или завершения, находящиеся в очереди, которые помогут определить состояние фоновых задач.
Закройте все открытые объекты устройства или датчика, когда вы активируете фоновую задачу DeviceUseTrigger, чтобы эти устройства или датчики были свободны для открытия и использования вашей фоновой задачей.
Зарегистрируйте триггер.
Тщательно рассмотрите влияние на батарею при доступе к устройству или датчику из фоновой задачи. Например, если интервал отчетов датчика слишком частый, это может привести к тому, что задача будет выполняться так часто, что быстро разрядит батарею телефона.
После завершения фоновой задачи отмените регистрацию.
Зарегистрируйте события отмены в вашем классе фоновых задач. Регистрация событий отмены позволит коду фоновой задачи корректно остановить выполнение задачи при её отмене Windows или приложением переднего плана.
При выходе из приложения (а не приостановке), отмените регистрацию и отмените все выполняемые задачи, если приложение больше не нуждается в них. В системах с ограниченными ресурсами, например на телефонах с ограниченной памятью, это позволит другим приложениям использовать фоновую задачу DeviceUseTrigger.
Когда приложение завершает работу, отмените регистрацию и отмените все выполняемые задачи.
Когда приложение завершает работу, фоновые задачи будут отменены, и все существующие обработчики событий будут отключены от существующих фоновых задач. Это предотвращает определение состояния фоновых задач. Снятие регистрации и отмена фоновой задачи позволит вашему коду отмены корректно остановить фоновые задачи.
Отмена фоновой задачи
Чтобы отменить задачу, выполняемую в фоновом режиме из приложения переднего плана, используйте метод Unregister в объекте BackgroundTaskRegistration, который вы используете в приложении, чтобы зарегистрировать фоновую задачу DeviceUseTrigger фоновой задаче. Разрегистрация фоновой задачи с помощью метода Unregister в BackgroundTaskRegistration приведет к тому, что инфраструктура фоновых задач отменит вашу фоновую задачу.
Метод Отмена регистрации дополнительно принимает логическое значение true или false, чтобы указать, следует ли отменить текущие экземпляры фоновой задачи, не разрешая им завершиться. Дополнительные сведения см. в справочнике по API для отмены регистрации.
Помимо отмены регистрациивашему приложению также потребуется вызвать BackgroundTaskDeferral.Complete. Это информирует систему о том, что асинхронная операция, связанная с фоновой задачей, завершена.