Доступ к датчикам и устройствам из фоновой задачи
DeviceUseTrigger позволяет приложению UWP получать доступ к датчикам и периферийным устройствам в фоновом режиме даже тогда, когда приложение переднего плана приостановлено. Например, в зависимости от того, где работает ваше приложение, он может использовать фоновую задачу для синхронизации данных с устройствами или датчиками мониторинга. Чтобы сохранить время работы батареи и обеспечить соответствующее согласие пользователя, использование 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 , чтобы эти устройства или датчики были свободны для открытия и использования фоновой задачей.
Зарегистрируйте триггер.
Внимательно рассмотрим влияние батареи на доступ к устройству или senor из фоновой задачи. Например, наличие интервала отчета датчика слишком часто может привести к тому, что задача будет выполняться так часто, что она быстро очищает батарею телефона.
После завершения фоновой задачи отмените регистрацию.
Зарегистрируйтесь для событий отмены из фонового класса задач. Регистрация событий отмены позволит фоновому коду задачи чисто остановить выполнение фоновой задачи при отмене Windows или приложением переднего плана.
При выходе из приложения (а не приостановке), отмените регистрацию и отмените все выполняемые задачи, если приложение больше не нуждается в них. В системах с ограниченными ресурсами, например телефонов с низкой памятью, это позволит другим приложениям использовать фоновую задачу DeviceUseTrigger .
Когда приложение завершает работу, отмените регистрацию и отмените все выполняемые задачи.
Когда приложение завершает работу, фоновые задачи будут отменены, и все существующие обработчики событий будут отключены от существующих фоновых задач. Это предотвращает определение состояния фоновых задач. Отмена регистрации и отмена фоновой задачи позволит коду отмены чисто остановить фоновые задачи.
Отмена фоновой задачи
Чтобы отменить задачу, выполняемую в фоновом режиме из приложения переднего плана, используйте метод Unregister в объекте BackgroundTaskRegistration, который используется в приложении для регистрации фоновой задачи DeviceUseTrigger. Отмена регистрации фоновой задачи с помощью метода отмены регистрации в BackgroundTaskRegistration приведет к отмене фоновой задачи.
Метод Unregister дополнительно принимает логическое значение true или false, чтобы указать, следует ли отменить выполнение экземпляров фоновой задачи, не разрешая их завершению. Дополнительные сведения см. в справочнике по API для отмены регистрации.
Помимо отмены регистрации приложение также потребуется вызвать BackgroundTaskDeferral.Complete. Это сообщает системе, что асинхронная операция, связанная с фоновой задачей.