Поделиться через


Создание фоновой задачи устройства в Windows 8.1 (приложения устройств UWP)

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

Примечание.

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

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

Манифест приложения

Чтобы использовать фоновую задачу устройства, приложение должно объявить его в файле манифеста приложения переднего плана, как и для фоновых задач, активированных системой. Дополнительные сведения см. в разделе "Синхронизация устройств и обновление" для приложений устройств UWP.

В этом примере из файла манифеста пакета приложения DeviceLibrary.SyncContent — это точки входа из приложения переднего плана. DeviceLibrary.SyncContent — это точка входа для фоновой задачи, которая использует DeviceUseTrigger.

<Extensions>
  <Extension Category="windows.backgroundTasks" EntryPoint="DeviceLibrary.SyncContent">
    <BackgroundTasks>
      <m2:Task Type="deviceUse" /> 
    </BackgroundTasks>
  </Extension>
</Extensions>

Фоновая задача устройства

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

Фоновый класс устройства в примере пользовательского USB-устройства содержит код для синхронизации с USB-устройством с помощью фоновой задачи DeviceUseTrigger . Для получения полных сведений скачайте пример. Дополнительные сведения о реализации IBackgroundTask и фоновой инфраструктуре задач Windows см. в статье "Поддержка приложения с фоновыми задачами".

Ключевые части фоновой задачи устройства в примере пользовательского USB-устройства:

  1. Класс IoSyncBackgroundTask реализует интерфейс, необходимый IBackgroundTask инфраструктурой фоновых задач Windows.

  2. Класс IoSyncBackgroundTask получает экземпляр, переданный DeviceUseDetails в класс в IoSyncBackgroundTask методе выполнения класса, и использует этот экземпляр для отправки отчета о ходе выполнения в приложение Microsoft Store и регистрации для событий отмены.

  3. Метод IoSyncBackgroundTask Run класса также вызывает частные OpenDevice и WriteToDeviceAsync методы, реализующие код синхронизации фоновых устройств.

Приложение переднего плана

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

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

  1. Создает новые объекты DeviceUseTrigger и BackgroundTaskRegistration объекты.

  2. Проверяет, были ли фоновые задачи ранее зарегистрированы этим приложением и отменяют их, вызвав метод BackgroundTaskRegistration.Unregister для задачи.

  3. SetupBackgroundTask Частный метод регистрирует фоновую задачу, которая будет синхронизироваться с устройством. Метод SetupBackgroundTask вызывается из SyncWithDeviceAsync метода на следующем шаге.

    1. Инициализирует DeviceUseTrigger и сохраняет его для последующего использования.

    2. Создает новый BackgroundTaskBuilder объект и использует его SetTriggerNameTaskEntryPoint свойства и метод для регистрации объекта приложения DeviceUseTrigger и имени фоновой задачи. Свойство BackgroundTaskBuilder объекта TaskEntryPoint имеет полное имя фонового класса задач, который будет выполняться при активации фоновой задачи.

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

  4. SyncWithDeviceAsync Частный метод регистрирует фоновую задачу, которая будет синхронизироваться с устройством и запускает фоновую синхронизацию.

    1. SetupBackgroundTask Вызывает метод из предыдущего шага и регистрирует фоновую задачу, которая будет синхронизироваться с устройством.

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

      Внимание

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

    Затем метод вызывает DeviceUseTrigger метод объектаRequestAsync, StartSyncBackgroundTaskAsync который запускает фоновую задачу и возвращает DeviceTriggerResults объект, RequestAsync используемый для определения успешности запуска фоновой задачи.

    Внимание

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

  5. Наконец, метод использует DeviceTriggerResults объект, возвращенный изStartSyncBackgroundTaskAsync, чтобы определить, SyncWithDeviceAsync успешно ли запущена фоновая задача. Оператор switch используется для проверки результата из DeviceTriggerResults

  6. Приложение переднего плана реализует частный OnSyncWithDeviceProgress обработчик событий, который обновляет пользовательский интерфейс приложения с прогрессом из фоновой задачи устройства.

  7. Приложение переднего плана реализует частный OnSyncWithDeviceCompleted обработчик событий для обработки перехода от фоновых задач к приложению переднего плана при завершении фоновой задачи.

    1. CheckResults Использует метод BackgroundTaskCompletedEventArgs объекта, чтобы определить, были ли исключения вызваны фоновой задачей.

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

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

    1. Обработчик частных Sync_Click событий вызывает метод, описанный SyncWithDeviceAsync в предыдущих шагах.

    2. Обработчик частных CancelSync_Click событий вызывает частный CancelSyncWithDevice метод для отмены фоновой задачи.

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

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

Синхронизация устройств и обновление для приложений устройств UWP

Launching, resuming, and multitasking

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