Синхронизация устройств и обновление приложений магазина в Windows 8.1

В Windows 8.1 приложение UWP может использовать фоновую задачу устройства для синхронизации данных на периферийном устройстве. Если приложение связано с метаданными устройства, приложение устройства UWP также может использовать агент фона устройства для выполнения обновлений устройств, таких как обновления встроенного ПО. Фоновые агенты устройства применяются к политикам, которые обеспечивают согласие пользователя и помогают сохранить время работы батареи во время синхронизации и обновления устройств.

Для выполнения операций синхронизации и обновления устройств создайте фоновую задачу устройства, которая использует DeviceUseTrigger и DeviceServicingTrigger соответственно. Сведения о том, как это сделать с помощью примера пользовательского USB-устройства, см. в статье "Создание фоновой задачи устройства".

Примечание.

среда выполнения Windows API устройств не требуют метаданных устройства. Это означает, что ваше приложение не должно быть приложением устройства UWP для их использования. Приложения UWP могут использовать эти API для доступа к USB, устройствам интерфейса человека (HID), устройствам Bluetooth и т. д. Дополнительные сведения см. в разделе "Интеграция устройств".

Обзор фоновой задачи устройства

Когда пользователи перемещают приложение UWP вне экрана, Windows приостанавливает работу приложения в памяти. Это позволяет другому приложению иметь передний план. Когда приложение приостановлено, он находится в памяти, и Windows перестал работать. Когда это происходит, без помощи фоновой задачи устройства все текущие операции устройства, такие как синхронизация и обновление, будут прерваны. Windows 8.1 предоставляет два новых триггера фоновой задачи, которые позволяют приложению выполнять длительные операции синхронизации и обновления на периферийном устройстве безопасно в фоновом режиме, даже если приложение приостановлено: DeviceUseTrigger и DeviceServicingTrigger. Дополнительные сведения о приостановке приложений см. в разделе "Запуск", "Возобновление" и "Многозадачность".

Триггер фоновой задачи Требуется метаданные устройства Description
DeviceUseTrigger No Включает длительные операции синхронизации с периферийным устройством или с вашего периферийного устройства во время приостановки приложения. Синхронизация устройства в фоновом режиме требует, чтобы пользователь одобрил фоновую синхронизацию приложения. Устройство также должно быть подключено к компьютеру или подключено к нему с активным вводом-выводом и допускается не более 10 минут фонового действия. Дополнительные сведения о применении политик описаны далее в этом разделе.
DeviceServicingTrigger Да nables длительные обновления устройств, например параметры передачи или обновления встроенного ПО, в то время как ваше приложение приостановлено. При обновлении устройства в фоновом режиме требуется утверждение пользователя при каждом использовании фоновой задачи. В отличие от фоновой задачи DeviceUseTrigger, фоновая задача DeviceServicingTrigger позволяет перезагружать и отключать устройство и разрешает не более 30 минут фонового действия. Дополнительные сведения о применении политик описаны далее в этом разделе.

DeviceServicingTrigger требует метаданных устройства, так как приложение должно быть указано как привилегированное приложение для выполнения операций обновления устройства.

Привилегии приложения

Некоторые критически важные операции устройства, такие как длительные обновления устройств, могут выполняться только привилегированным приложением. Привилегированное приложение — это приложение , которое производитель устройства авторизован для выполнения этих операций. Метаданные устройства указывают, какое приложение, если есть, было назначено в качестве привилегированного приложения для устройства.

При создании метаданных устройства с помощью мастера метаданных устройства укажите приложение на странице сведений о приложении устройства UWP. Дополнительные сведения см. в разделе "Шаг 2. Создание метаданных устройства для приложения устройства UWP".

Поддерживаемые протоколы

Фоновые задачи устройства, использующие DeviceUseTrigger и DeviceServicingTrigger, позволяют приложению взаимодействовать с периферийными устройствами через протоколы, которые не поддерживаются задачами, запускаемыми системой, обычно используемыми приложениями UWP.

Протокол DeviceServicingTrigger DeviceUseTrigger Системные триггеры
USB deviceservicingtrigger supports usb. deviceusetrigger supports usb system triggers do not support usb
СПРЯТАЛ deviceservicingtrigger supports hid. deviceusetrigger supports hid system triggers do not support hid
Bluetooth RFCOMM deviceservicingtrigger supports bluetooth rfcomm. deviceusetrigger supports bluetooth rfcomm system triggers do not support bluetooth rfcomm
Bluetooth GATT deviceservicingtrigger supports bluetooth gatt. deviceusetrigger supports bluetooth gatt system triggers do not support bluetooth gatt
MTP deviceservicingtrigger supports mtp. deviceusetrigger does not support mtp system triggers do not support mtp
Проводная сеть deviceservicingtrigger supports network wired. deviceusetrigger does not support network wired system triggers do not support network wired
Сеть Wi-Fi deviceservicingtrigger supports networked wi-fi. deviceusetrigger does not support networked wi-fi system triggers do not support network wi-fi
IDeviceIOControl deviceservicingtrigger supports ideviceiocontrol. deviceusetrigger does not support ideviceiocontrol system triggers do not support 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, выполните этот базовый набор шагов. Дополнительные сведения о фоновых задачах см. в статье "Поддержка приложения с фоновыми задачами".

  1. Приложение регистрирует фоновую задачу в манифесте приложения и внедряет фоновый код задачи в класс среда выполнения Windows, который реализует IBackgroundTask или на выделенной странице JavaScript для приложений JavaScript.

  2. При запуске приложения он создаст и настроит объект триггера устройства соответствующего типа, DeviceUseTrigger или DeviceServicingTrigger и сохраните экземпляр триггера для дальнейшего использования.

  3. Приложение проверка, зарегистрирована ли фоновая задача и, если нет, регистрирует его в триггере устройства. Обратите внимание, что приложению не разрешено задавать условия для задачи, связанной с этим триггером.

  4. Когда приложению необходимо активировать фоновую задачу, он вызывает метод активации RequestAsync в объекте триггера устройства.

  5. Фоновая задача не регулируется, как и другие системные фоновые задачи (нет квоты времени ЦП), но будут выполняться с меньшим приоритетом, чтобы обеспечить скорость реагирования приложений переднего плана.

  6. После этого Windows проверит, исходя из типа триггера, что были выполнены необходимые политики, включая запрос согласия пользователя на операцию перед началом фоновой задачи.

  7. Windows отслеживает системные условия и среду выполнения задач, а при необходимости отменяет задачу, если необходимые условия больше не выполнены.

  8. Когда фоновые задачи сообщают о ходе выполнения или завершении, ваше приложение получит эти события через ход выполнения и завершенные события для зарегистрированной задачи.

Важные моменты, которые следует учитывать при использовании фоновых задач устройства

  • Возможность программно активировать фоновые задачи, использующие DeviceUseTrigger и DeviceServicingTrigger, появилась в Windows 8.1 и ограничена только фоновыми задачами устройства.

  • Некоторые политики применяются Windows, чтобы обеспечить согласие пользователя при обновлении периферийных устройств. При синхронизации и обновлении периферийных устройств применяется дополнительная политика.

  • Фоновые задачи, использующие DeviceUseTrigger и DeviceServicingTrigger, могут быть отменены Windows, если определенные требования политики больше не выполняются, включая максимальное время фона (время настенные часы). Важно учитывать эти требования к политике при использовании этих фоновых задач для взаимодействия с периферийным устройством.

Совет

Чтобы узнать, как работают эти фоновые задачи, скачайте пример. В примере пользовательского USB-устройства показана фоновая задача, которая выполняет синхронизацию устройств с DeviceUseTrigger.

При использовании DeviceUseTrigger или DeviceServicingTrigger Windows 8.1 применяет политики, чтобы убедиться, что пользователь предоставил приложению разрешение на доступ к устройству в фоновом режиме для синхронизации и обновления содержимого. Политики также применяются для сохранения жизни батареи пользователя при синхронизации и обновлении периферийных устройств.

Фоновая задача, использующая DeviceUseTrigger, требует однократного согласия пользователя, позволяющего приложению синхронизироваться в фоновом режиме. Это согласие сохраняется для каждого приложения и модели на устройство. Пользователь дает согласие на предоставление приложению доступа к устройству в фоновом режиме так же, как и согласие на предоставление приложению доступа к устройству, когда приложение находится на переднем плане.

В следующем примере приложение с именем Tailspin Toys получает разрешение пользователя на синхронизацию в фоновом режиме.

device sync user consent message dialog.

Если пользователи изменяют свои умы позже, они могут отозвать разрешения в Параметры.

device sync permissions setting dialog.

В отличие от тех, которые используют DeviceUseTrigger, фоновые задачи, использующие фоновую задачу DeviceServicingTrigger, требуют согласия пользователя при каждом запуске фоновой задачи. И это согласие не хранится так, как это для DeviceUseTrigger. Это связано с более высоким риском операций, связанных с обновлениями встроенного ПО устройства и длительным временем, необходимым для обновлений устройств. Помимо получения согласия пользователя, Windows предоставит пользователям информацию об обновлениях устройств, например предупреждение о том, чтобы устройство было подключено к обновлению и гарантирует, что компьютер взимается, а также приблизительное время выполнения операции (если приложение предоставляет его).

device update user consent message dialog.

Ограничения частоты и переднего плана

Нет ограничений на частоту, с помощью которой ваше приложение может инициировать операции, но приложение может запускать только одну фоновую операцию DeviceUseTrigger или DeviceServicingTrigger за раз (это не влияет на другие типы фоновых задач) и может инициировать фоновую задачу только в то время как приложение находится на переднем плане. Если приложение не находится на переднем плане, оно не может инициировать фоновую задачу с помощью DeviceUseTrigger или DeviceServicingTrigger. Приложение не может инициировать вторую фоновую задачу устройства до завершения первой фоновой задачи.

Политики фоновых задач устройства

Windows применяет политики, когда приложение использует фоновую задачу устройства. Если эти политики не выполнены, может быть отменена фоновая задача с помощью DeviceUseTrigger или DeviceServicingTrigger. Важно учитывать эти требования политики при использовании фоновых задач устройства для взаимодействия с периферийным устройством.

Политики запуска задач

Эта таблица указывает, какие политики запуска задач применяются к каждому триггеру фоновой задачи.

Полис DeviceServicingTrigger DeviceUseTrigger
Приложение UWP находится на переднем плане при активации фоновой задачи. policy applies. policy applies
Устройство подключено к системе (или в диапазоне для беспроводного устройства). policy applies. policy applies
Фоновая задача потребляет 400 мс времени ЦП (при условии, что ЦП 1 ГГц) каждую минуту при блокировке экрана или каждые 5 минут, когда экран не заблокирован. Не удается выполнить эту политику, может привести к отмене задачи. policy applies. policy applies
Ваше устройство доступно приложению с помощью периферийных API устройства (API среда выполнения Windows для USB, HID, Bluetooth и т. д.). Если приложение не может получить доступ к устройству, доступ к фоновым задачам запрещен. policy applies. policy applies
Фоновая точка входа задачи, предоставляемая приложением, зарегистрирована в манифесте пакета приложения. policy applies. policy applies
Пользователь предоставил пользователю разрешение на продолжение задачи. Каждый раз. В первый раз, а затем управляется разрешениями приложения.
Оценка времени, предоставляемая приложением, составляет менее 30 минут. policy applies. policy does not apply
Приложение указывается как привилегированное приложение для устройства. (В метаданных устройства контейнера устройства должно быть полное сопоставление идентификатора приложения с привилегированным списком приложений.) policy applies. policy does not apply
Компьютер имеет больше 33% емкости батареи, оставшейся или на питание ac. policy applies. policy does not apply
Для каждого типа операции выполняется только одна фоновая задача устройства. policy check applies. policy applies

Политики выполнения проверка

Windows применяет следующие требования политики среды выполнения во время выполнения задачи в фоновом режиме. Если какие-либо из требований среды выполнения перестают быть верными, Windows отменит фоновую задачу устройства.

Эта таблица указывает, какие политики среды выполнения применяются к каждому триггеру фоновой задачи.

Проверка политики DeviceServicingTrigger DeviceUseTrigger
Ограничение времени на стены — общее время задачи приложения может выполняться в фоновом режиме. 30 минут 10 минут
Устройство подключено к системе (или в диапазоне для беспроводного устройства). policy does not apply. policy check applies
Задача выполняет регулярные операции ввода-вывода на устройство (1 ввода-вывода каждые 5 секунд). policy does not apply. policy check applies
Приложение не отменило задачу. policy check applies. policy check applies
Приложение не завершилось. policy check applies. policy check applies

Рекомендации

Ниже приведены рекомендации по использованию приложений устройств UWP, использующих фоновые задачи устройства.

Модель программирования фоновых задач устройства

Использование фоновых задач DeviceUseTrigger или DeviceServicingTrigger из приложения гарантирует, что все операции синхронизации или обновления устройств, запущенные из приложения переднего плана, продолжают работать в фоновом режиме, если пользователи переключают приложения и приложение переднего плана приостановлено Windows. Рекомендуется следовать этой общей модели для регистрации, активации и отмены регистрации фоновых задач:

  1. Зарегистрируйте фоновую задачу перед запросом триггера.

  2. Подключение обработчики событий выполнения и завершения в триггер. Когда приложение возвращается из приостановки, Windows предоставит вашему приложению любые события хода выполнения в очереди или завершения, которые можно использовать для определения состояния фоновых задач.

  3. Закройте все открытые объекты устройств при активации фоновых задач DeviceUseTrigger или DeviceServicingTrigger, чтобы эти устройства были свободны для открытия и использования фоновой задачей.

  4. Зарегистрируйте триггер.

  5. После завершения задачи отмените регистрацию фоновой задачи. После завершения фоновой задачи можно отменить регистрацию фоновых задач и повторно открыть устройство и регулярно использовать его из приложения UWP.

  6. Зарегистрируйтесь для событий отмены из фонового класса задач. Регистрация событий отмены позволит фоновому коду задачи чисто остановить выполнение фоновой задачи при отмене Windows или приложением переднего плана.

  7. При выходе приложения (а не приостановке), отмените регистрацию и отмените все выполняемые задачи.

    • Когда приложение завершает работу, отмените регистрацию и отмените все выполняемые задачи.

    • Когда приложение завершает работу, фоновые задачи будут отменены, и все существующие обработчики событий будут отключены от существующих фоновых задач. Это предотвращает определение состояния фоновых задач. Отмена регистрации и отмена фоновой задачи позволит коду отмены чисто остановить фоновые задачи.

Совет

Подробные сведения о том, как это делается с помощью примера пользовательского USB-устройства, см. в разделе "Создание фоновой задачи устройства".

Отмена фоновой задачи

Чтобы отменить задачу, выполняемую в фоновом режиме из приложения переднего плана, используйте метод Unregister в объекте BackgroundTaskRegistration, который вы используете в приложении, чтобы зарегистрировать фоновую задачу DeviceUseTrigger или DeviceServicingTrigger. Отмена регистрации фоновой задачи с помощью метода отмены регистрации в BackgroundTaskRegistration приведет к отмене фоновой задачи.

Метод Unregister дополнительно принимает логическое значение true или false, чтобы указать, следует ли отменить выполнение экземпляров фоновой задачи, не разрешая их завершению. Дополнительные сведения см. в справочнике по API для BackgroundTaskRegistration.Unregister.

Создание фоновой задачи устройства

Пример пользовательского USB-устройства

Launching, resuming, and multitasking

Поддержка приложения с фоновыми задачами