다음을 통해 공유


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 디바이스 샘플디바이스 백그라운드 클래스에는 DeviceUseTrigger 백그라운드 작업을 사용하여 USB 디바이스에 동기화를 수행하는 코드가 포함되어 있습니다. 자세한 내용은 샘플을 다운로드합니다. Windows의 구현 IBackgroundTask 및 백그라운드 작업 인프라에 대한 자세한 내용은 백그라운드 작업으로 앱 지원을 참조하세요.

사용자 지정 USB 디바이스 샘플에서 디바이스 백그라운드 작업의 주요 부분은 다음과 같습니다.

  1. 이 클래스는 IoSyncBackgroundTask Windows 백그라운드 작업 인프라에 필요한 인터페이스를 구현 IBackgroundTask 합니다.

  2. 클래스는 IoSyncBackgroundTask 클래스의 Run 메서드에서 클래스에 IoSyncBackgroundTask 전달된 인스턴스를 가져오 DeviceUseDetails 고 이 인스턴스를 사용하여 진행 상황을 Microsoft Store 앱에 다시 보고하고 취소 이벤트에 등록합니다.

  3. 클래스의 Run 메서드는 IoSyncBackgroundTask 백그라운드 디바이스 동기화 코드를 구현하는 프라이빗 OpenDeviceWriteToDeviceAsync 메서드도 호출합니다.

포그라운드 앱

사용자 지정 USB 디바이스 샘플포그라운드 앱은 DeviceUseTrigger를 사용하는 디바이스 백그라운드 작업을 등록하고 트리거합니다. 이 섹션에서는 디바이스 백그라운드 작업에 대한 진행률을 등록, 트리거 및 처리하기 위해 포그라운드 앱이 수행하는 단계에 대한 개요를 제공합니다.

사용자 지정 USB 디바이스 샘플포그라운드 앱은 디바이스 백그라운드 작업을 사용하기 위해 다음 단계를 수행합니다.

  1. DeviceUseTriggerBackgroundTaskRegistration 개체를 만듭니다.

  2. 백그라운드 작업이 이전에 이 앱에 의해 등록되었는지 확인하고 작업에서 BackgroundTaskRegistration.Unregister 메서드를 호출하여 취소합니다.

  3. 프라이빗 SetupBackgroundTask 메서드는 디바이스와 동기화할 백그라운드 작업을 등록합니다. 메서드는 SetupBackgroundTask 다음 단계의 SyncWithDeviceAsync 메서드에서 호출됩니다.

    1. 나중에 사용하기 위해 초기화 DeviceUseTrigger 하고 저장합니다.

    2. BackgroundTaskBuilder 개체를 만들고 해당 TaskEntryPointName개체와 속성 및 SetTrigger 메서드를 사용하여 앱의 DeviceUseTrigger 개체 및 백그라운드 작업 이름을 등록합니다. BackgroundTaskBuilder 개체의 TaskEntryPoint 속성은 백그라운드 작업이 트리거될 때 실행될 백그라운드 작업 클래스의 전체 이름으로 설정됩니다.

    3. 포그라운드 앱이 사용자에게 완료 및 진행률 업데이트를 제공할 수 있도록 백그라운드 작업에서 완료 및 진행률 이벤트를 등록합니다.

  4. 프라이빗 SyncWithDeviceAsync 메서드는 디바이스와 동기화할 백그라운드 작업을 등록하고 백그라운드 동기화를 시작합니다.

    1. SetupBackgroundTask 이전 단계에서 메서드를 호출하고 디바이스와 동기화할 백그라운드 작업을 등록합니다.

    2. 백그라운드 작업을 시작하는 private StartSyncBackgroundTaskAsync 메서드를 호출합니다. 이 메서드는 백그라운드 작업이 시작될 때 디바이스를 열 수 있도록 디바이스에 대한 앱의 핸들을 닫습니다.

      Important

      백그라운드 작업은 포그라운드 앱이 호출 RequestAsync하기 전에 디바이스에 대한 연결을 닫아야 하므로 업데이트를 수행하기 위해 디바이스를 열어야 합니다.

    다음으로, 메서드는 StartSyncBackgroundTaskAsync 백그라운드 작업을 트리거하고 백그라운드 작업이 성공적으로 시작되었는지 확인하기 위해 사용되는 개체를 반환 DeviceTriggerResults 하는 개체 RequestAsyncRequestAsync 메서드를 호출 DeviceUseTrigger 합니다.

    Important

    Windows 검사 필요한 모든 작업 시작 정책 검사 완료되었는지 확인합니다. 모든 정책 검사 완료되면 업데이트 작업이 포그라운드 앱 외부에서 백그라운드 작업으로 실행되므로 작업이 진행되는 동안 앱을 안전하게 일시 중단할 수 있습니다. 또한 Windows는 런타임 요구 사항을 적용하고 해당 요구 사항이 더 이상 충족되지 않는 경우 백그라운드 작업을 취소합니다.

  5. 마지막으로 메서드는 SyncWithDeviceAsync 반환 StartSyncBackgroundTaskAsync 된 개체를 DeviceTriggerResults 사용하여 백그라운드 작업이 성공적으로 시작되었는지 확인합니다. switch 문은 다음에서 결과를 검사하는 데 사용됩니다. DeviceTriggerResults

  6. 포그라운드 앱은 디바이스 백그라운드 작업의 진행률로 앱 UI를 업데이트하는 프라이빗 OnSyncWithDeviceProgress 이벤트 처리기를 구현합니다.

  7. 포그라운드 앱은 백그라운드 작업이 완료될 때 백그라운드 작업에서 포그라운드 앱으로의 전환을 처리하는 프라이빗 OnSyncWithDeviceCompleted 이벤트 처리기를 구현합니다.

    1. 개체의 CheckResults 메서드를 BackgroundTaskCompletedEventArgs 사용하여 백그라운드 작업에서 예외가 throw되었는지 확인합니다.

    2. 백그라운드 작업이 완료되었으므로 포그라운드 앱이 앱에서 사용할 디바이스를 다시 열고 사용자에게 알리도록 UI를 업데이트합니다.

  8. 포그라운드 앱은 UI에서 프라이빗 단추 클릭 이벤트 처리기를 구현하여 백그라운드 작업을 시작하고 취소합니다.

    1. 프라이빗 Sync_Click 이벤트 처리기는 이전 단계에서 설명한 SyncWithDeviceAsync 메서드를 호출합니다.

    2. 프라이빗 CancelSync_Click 이벤트 처리기는 프라이빗 CancelSyncWithDevice 메서드를 호출하여 백그라운드 작업을 취소합니다.

  9. Private CancelSyncWithDevice 메서드는 BackgroundTaskRegistration.Unregister 메서드를 사용하여 디바이스를 다시 열 수 있도록 활성 디바이스 동기화를 등록 취소하고 취소합니다.

사용자 지정 USB 디바이스 샘플

UWP 디바이스 앱에 대한 디바이스 동기화 및 업데이트

Launching, resuming, and multitasking

백그라운드 작업으로 앱 지원