백그라운드 작업에서 센서 및 디바이스에 액세스

DeviceUseTrigger를 사용하면 포그라운드 앱이 일시 중단된 경우에도 유니버설 Windows 앱이 백그라운드로 센서와 주변 기기에 액세스할 수 있습니다. 그 예로 앱이 실행되는 위치에 따라 백그라운드 작업을 사용하면, 데이터를 디바이스와 동기화하거나 센서를 모니터링할 수 있습니다. 이 토픽에 설명된 정책은 배터리 수명을 유지하고 적절한 사용자 동의를 보장하기 위해 DeviceUseTrigger의 사용에 적용됩니다.

백그라운드에서 센서 또는 주변 디바이스에 액세스하려면 DeviceUseTrigger를 사용하는 백그라운드 작업을 생성하세요. PC로 이 작업을 수행하는 방법에 관한 예제는 사용자 지정 USB 디바이스 샘플을 참조하세요. 휴대폰 관련 예제는 백그라운드 센서 샘플을 참조하세요.

Important

DeviceUseTrigger는 In-process 백그라운드 작업과 함께 사용할 수 없습니다. 이 토픽의 정보는 Out-of-process가 실행되는 백그라운드 작업에만 적용됩니다.

디바이스 백그라운드 작업 개요

앱이 더 이상 사용자에게 표시되지 않는 경우, Windows는 메모리 및 CPU 리소스를 회수하기 위해 앱을 일시 중단하거나 종료합니다. 이렇게 하면 다른 앱이 포그라운드에서 실행되고 배터리 사용량이 줄어듭니다. 이 경우 백그라운드 작업의 도움이 없으면 진행 중인 모든 데이터 이벤트가 손실됩니다. Windows는 앱이 일시 중단된 경우에도 디바이스 및 센서를 통해 장기 동기화 작업 및 모니터링 작업을 백그라운드에서 안전하게 실행할 수 있도록 백그라운드 작업 트리거인 DeviceUseTrigger를 제공합니다. 앱 수명 주기에 대한 자세한 내용은 시작, 다시 시작, 백그라운드 작업을 참조하세요. 백그라운드 작업에 대한 자세한 내용은 백그라운드 작업을 이용한 앱 지원을 참조하세요.

참고 유니버설 Windows 앱의 경우, 백그라운드에서 디바이스를 동기화하려면 사용자가 앱을 통한 백그라운드 동기화를 승인해야 합니다. 또한 활성 I/O를 이용하여 디바이스를 PC에 연결하거나 페어링해야 하며, 디바이스의 백그라운드 활동은 최대 10분간 허용됩니다. 정책 적용에 대한 자세한 내용은 이 토픽의 뒷부분에 설명되어 있습니다.

제한 사항: 중요한 디바이스 작업

일부 중요한 디바이스 작업(예: 장기 펌웨어 업데이트)은 DeviceUseTrigger로 실행할 수 없습니다. 이러한 작업은 PC에서만 실행할 수 있으며 DeviceServicingTrigger를 사용하는 권한 있는 앱에서만 실행할 수 있습니다. 권한 있는 앱이란 디바이스 제조업체가 해당 작업을 실행할 수 있도록 권한을 부여한 앱을 말합니다. 디바이스 메타데이터는 디바이스의 권한 있는 앱으로 지정된 앱(있는 경우)을 지정하는 데 사용됩니다. 자세한 내용은 Microsoft Store 디바이스 앱용 디바이스 동기화 및 업데이트를 참조하세요.

DeviceUseTrigger 백그라운드 작업에서 지원되는 프로토콜/API

DeviceUseTrigger를 사용하는 백그라운드 작업을 실행하면 앱으로 여러 프로토콜/API와 통신할 수 있습니다. 대부분의 프로토콜/API는 시스템 트리거 백그라운드 작업에서 지원되지 않습니다. 다음 항목은 유니버설 Windows 앱에서 지원됩니다.

프로토콜 유니버설 Windows 앱의 DeviceUseTrigger
USB this protocol is supported.
HID this protocol is supported.
Bluetooth RFCOMM this protocol is supported.
Bluetooth GATT this protocol is supported.
MTP this protocol is supported.
네트워크 유선 this protocol is supported.
네트워크 Wi-Fi this protocol is supported.
IDeviceIOControl deviceservicingtrigger supports ideviceiocontrol
센서 API deviceservicingtrigger supports universal sensors apis(유니버설 디바이스 제품군의 센서로 제한됨)

앱 패키지 매니페스트에 백그라운드 작업 등록하기

앱은 백그라운드 작업의 일환으로 실행되는 코드에서 동기화 작업 및 업데이트 작업을 실행합니다. 이 코드는 IBackgroundTask(또는 JavaScript 앱 전용 JavaScript 페이지)를 구현하는 Windows 런타임 클래스에 포함되어 있습니다. DeviceUseTrigger 백그라운드 작업을 사용하려면 앱이 시스템 트리거 백그라운드 작업과 마찬가지로 포그라운드 앱의 앱 매니페스트 파일에서 이 작업을 선언해야 합니다.

이 앱 패키지 매니페스트 파일 예제에서 DeviceLibrary.SyncContentDeviceUseTrigger를 사용하는 백그라운드 작업의 진입점입니다.

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

DeviceUseTrigger 사용법 소개

DeviceUseTrigger를 사용하려면 다음 기본 단계를 따라 하세요. 백그라운드 작업에 대한 자세한 내용은 백그라운드 작업을 이용한 앱 지원을 참조하세요.

  1. 앱은 앱 매니페스트에 백그라운드 작업을 등록하고, IBackgroundTask를 구현하는 Windows 런타임 클래스 또는 JavaScript 앱 전용 JavaScript 페이지에 백그라운드 작업 코드를 포함시킵니다.
  2. 앱이 시작되면 DeviceUseTrigger 유형의 트리거 개체가 생성 및 구성되고, 나중에 사용할 트리거 인스턴스가 저장됩니다.
  3. 앱은 백그라운드 작업이 이전에 등록되었는지 여부를 검사하며, 등록되지 않은 경우 작업을 해당 트리거에 대해 등록합니다. 이 트리거에 연결된 작업에 대한 조건을 앱에서 설정하는 것이 허용되지 않았다는 점에 유의하세요.
  4. 앱으로 백그라운드 작업을 트리거해야 하는 경우, 먼저 RequestAccessAsync를 호출해서 해당 앱이 백그라운드 작업을 요청할 수 있는지 확인해야 합니다.
  5. 앱이 백그라운드 작업을 요청할 수 있는 경우, 해당 앱이 디바이스 트리거 개체에서 RequestAsync 활성화 메서드를 호출합니다.
  6. 이 백그라운드 작업은 다른 시스템 백그라운드 작업처럼 제한되지 않지만(CPU 시간 할당량 없음), 포그라운드 앱의 응답성을 유지하기 위해 더 낮은 우선 순위대로 실행됩니다.
  7. 그런 다음 백그라운드 작업을 시작하기 전에, Windows가 트리거 유형에 따라 필수 정책이 충족(작업에 대한 사용자 동의를 요청하는 작업 포함)되었는지 검증합니다.
  8. Windows는 시스템 조건 및 작업 런타임을 모니터링하며, 필수 조건이 더 이상 충족되지 않으면 작업을 취소합니다(필요한 경우).
  9. 백그라운드 작업에서 진행률 또는 완료를 보고하면 앱이 등록된 작업의 진행률 및 완료된 이벤트를 통해 이 이벤트를 받습니다.

중요DeviceUseTrigger를 사용할 때 다음과 같은 중요한 점을 고려해야 합니다.

  • DeviceUseTrigger를 사용하는 백그라운드 작업을 프로그래밍 방식으로 트리거하는 기능은 Windows 8.1 및 Windows Phone 8.1에서 최초로 도입되었습니다.

  • PC로 주변 디바이스를 업데이트하면 Windows가 사용자 동의를 보장하기 위해 특정 정책을 적용합니다.

  • 주변 디바이스를 동기화하고 업데이트하면 사용자 배터리 수명을 유지하기 위해 추가 정책이 적용됩니다.

  • 최대 백그라운드 시간(벽시계 시간) 등의 특정 정책 요건이 더 이상 충족되지 않으면 Windows가 DeviceUseTrigger를 사용하는 백그라운드 작업을 취소할 수 있습니다. 이 백그라운드 작업을 사용하여 주변 디바이스와 상호 작용할 때는 이러한 정책 요건을 고려하는 것이 중요합니다.

이 백그라운드 작업의 작동 방법을 확인하려면 샘플을 다운로드하세요. PC로 이 작업을 수행하는 방법에 관한 예제는 사용자 지정 USB 디바이스 샘플을 참조하세요. 휴대폰 관련 예제는 백그라운드 센서 샘플을 참조하세요.  

빈도 및 포그라운드 제한 사항

앱이 작업을 시작할 수 있는 빈도에는 제한이 없습니다. 하지만 앱은 DeviceUseTrigger 백그라운드 작업을 한 번에 한 개만 실행할 수 있으며(다른 유형의 백그라운드 작업에는 영향을 주지 않음), 해당 앱이 포그라운드에 있는 동안에만 백그라운드 작업을 시작할 수 있습니다. 앱이 포그라운드에 없으면 DeviceUseTrigger로 백그라운드 작업을 시작할 수 없습니다. 앱은 첫 번째 백그라운드 작업이 완료되기 전에 두 번째 DeviceUseTrigger 백그라운드 작업을 시작할 수 없습니다.

디바이스 제한 사항

각 앱은 DeviceUseTrigger 백그라운드 작업을 한 개만 등록하고 실행하도록 제한되어 있습니다. 단, 앱이 실행 중인 디바이스는 여러 앱이 DeviceUseTrigger 백그라운드 작업을 등록하고 실행하도록 허용할 수 있습니다. 디바이스에 따라 모든 앱의 DeviceUseTrigger 백그라운드 작업의 총 건수에 제한이 있을 수 있습니다. 이렇게 하면 리소스가 제한된 디바이스의 배터리를 유지할 수 있습니다. 자세한 내용은 다음 표를 참조하세요.

단일 DeviceUseTrigger 백그라운드 작업에서는 앱을 통해 개수가 무제한인 주변 디바이스 또는 센서에 액세스할 수 있습니다. 해당 디바이스 또는 센서는 이전 표에 나열된 지원 대상 API 및 프로토콜에 의해서만 제한됩니다.

백그라운드 작업 정책

앱이 DeviceUseTrigger 백그라운드 작업을 사용하면 Windows가 정책을 적용합니다. 이 정책이 충족되지 않으면 백그라운드 작업이 취소될 수 있습니다. 이 유형의 백그라운드 작업을 사용하여 디바이스 또는 센서와 상호 작용할 때는 이러한 정책 요건을 고려하는 것이 중요합니다.

작업 시작 정책

이 표는 유니버설 Windows 앱에 적용되는 작업 시작 정책을 나타냅니다.

정책 유니버설 Windows 앱의 DeviceUseTrigger
백그라운드 작업을 트리거할 때는 앱이 포그라운드에 있습니다. policy applies
디바이스가 시스템(또는 무선 디바이스의 범위 내)에 연결됩니다. policy applies
이 디바이스는 지원 대상 디바이스 주변 API(USB, HID, Bluetooth, 센서 등에 대한 Windows 런타임 API)를 사용하여 앱에 액세스할 수 있습니다. 앱이 디바이스 또는 센서에 액세스하지 못하면 백그라운드 작업에 대한 액세스가 거부됩니다. policy applies
앱에서 제공하는 백그라운드 작업 진입점은 앱 패키지 매니페스트에 등록됩니다. policy applies
DeviceUseTrigger 백그라운드 작업은 앱당 한 개만 실행되고 있습니다. policy applies
앱이 실행 중인 디바이스가 DeviceUseTrigger 백그라운드 작업의 최대 건수에 아직 도달하지 않았습니다. 데스크톱 디바이스 패밀리: 개수에 제한 없이 작업을 등록하고 병렬로 실행할 수 있습니다. 모바일 디바이스 패밀리: 512MB 디바이스에서는 1개의 작업, 그 외 디바이스에서는 2개의 작업을 등록하고 병렬로 실행할 수 있습니다.
지원 대상 API/프로토콜을 사용하는 경우 앱이 단일 DeviceUseTrigger 백그라운드 작업에서 액세스할 수 있는 주변 디바이스 또는 센서의 최대 개수입니다. 무제한
백그라운드 작업은 400ms의 CPU 시간(1GHz CPU로 가정함)을 화면이 잠겨 있을 경우 1분마다, 혹은 화면이 잠겨 있지 않은 경우 5분마다 사용합니다. 이 정책이 충족되지 않으면 작업이 취소될 수 있습니다. policy applies

런타임 정책 검사

Windows는 백그라운드에서 작업이 실행되는 동안 다음 런타임 정책 요건을 적용합니다. 런타임 요건 중 어떤 것도 충족되지 않으면 Windows가 디바이스 백그라운드 작업을 취소합니다.

이 표는 유니버설 Windows 앱에 적용되는 런타임 정책을 나타냅니다.

정책 검사 유니버설 Windows 앱의 DeviceUseTrigger
디바이스가 시스템(또는 무선 디바이스의 범위 내)에 연결됩니다. policy check applies
작업이 디바이스에 대한 일반 I/O를 실행 중입니다(5초마다 1 I/O). policy check applies
앱이 아직 작업을 취소하지 않았습니다. policy check applies
벽시계 시간 제한 – 앱의 작업이 백그라운드에서 실행될 수 있는 시간의 총량입니다. 데스크톱 디바이스 패밀리: 10분 모바일 디바이스 패밀리: 시간 제한 없음 리소스를 절약하기 위해 한 번에 1건 또는 2건 이하의 작업을 실행할 수 있습니다.
앱이 아직 종료되지 않았습니다. policy check applies

모범 사례

다음은 DeviceUseTrigger 백그라운드 작업을 사용하는 앱에 대한 모범 사례입니다.

백그라운드 작업 프로그래밍하기

사용자가 앱을 전환하여 포그라운드 앱이 Windows에서 일시 중단된 경우, 앱으로 DeviceUseTrigger 백그라운드 작업을 사용하면 포그라운드 앱에서 시작된 동기화 작업 또는 모니터링 작업이 백그라운드에서 계속 실행됩니다. 백그라운드 작업을 등록, 트리거 및 등록 취소하기 위해서는 이 전체 모델을 따르는 것이 좋습니다.

  1. RequestAccessAsync를 호출해서 이 앱이 백그라운드 작업을 요청할 수 있는지 확인하세요. 이 작업은 백그라운드 작업을 등록하기 전에 완료해야 합니다.

  2. 트리거를 요청하기 전에 백그라운드 작업을 등록하세요.

  3. 진행률 및 완료 이벤트 처리기를 트리거에 연결하세요. 앱이 일시 중단되었다가 복구되면 Windows가 백그라운드 작업의 상태를 확인하는 데 사용 가능한 대기 중인 진행률 또는 완료 이벤트를 앱에 제공합니다.

  4. DeviceUseTrigger 백그라운드 작업을 트리거할 경우 열려 있는 디바이스 개체 또는 센서 개체를 닫아서, 해당 디바이스 또는 센서를 백그라운드 작업에서 자유롭게 열고 사용할 수 있게 하세요.

  5. 트리거를 등록하세요.

  6. 백그라운드 작업에서 디바이스 또는 센서 액세스가 배터리에 미치는 영향을 신중하게 고려하세요. 예를 들어 센서의 보고서 간격이 너무 빈번하게 실행되면, 작업이 지나치게 자주 실행되어 휴대폰의 배터리가 빠르게 소진될 수 있습니다.

  7. 백그라운드 작업이 완료되면 작업 등록을 취소하세요.

  8. 백그라운드 작업 클래스에서 취소 이벤트를 등록하세요. 취소 이벤트를 등록하면 Windows 또는 포그라운드 앱에서 취소될 때 백그라운드 작업 코드가 실행 중인 백그라운드 작업을 완전히 중지할 수 있습니다.

  9. 앱 종료(일시 중단 아님) 시 실행 중인 작업이 앱에 더 이상 필요하지 않은 경우, 등록을 취소하고 해당 작업을 취소하세요. 리소스가 제한된 시스템(예: 메모리 용량이 적은 휴대폰)에서 이렇게 하면 다른 앱에서 DeviceUseTrigger 백그라운드 작업을 사용할 수 있습니다.

    • 앱이 종료되면 실행 중인 작업의 등록을 취소하고 해당 작업을 취소하세요.

    • 앱이 종료되면 백그라운드 작업이 취소되고, 기존 이벤트 처리기가 기존 백그라운드 작업과 연결이 끊어집니다. 이렇게 되면 백그라운드 작업의 상태를 확인할 수 없습니다. 백그라운드 작업의 등록을 취소하고 해당 작업을 취소하면 취소 코드가 백그라운드 작업을 완전히 중지할 수 있습니다.

백그라운드 작업 취소하기

백그라운드에서 실행 중인 작업을 포그라운드 앱으로 취소하려면 앱에서 사용하는 BackgroundTaskRegistration 개체의 Unregister(등록 취소) 메서드를 사용하여 DeviceUseTrigger 백그라운드 작업을 등록하세요. BackgroundTaskRegistration에서 Unregister(등록 취소) 메서드를 사용하여 백그라운드 작업의 등록을 취소하면 백그라운드 작업 인프라가 백그라운드 작업을 취소합니다.

이외에도 Unregister(등록 취소) 메서드는 부울의 true 또는 false 값을 사용하여 현재 실행 중인 백그라운드 작업의 인스턴스를 완료할 수 없도록 취소해야 하는지 여부를 나타냅니다. 자세한 내용은 Unregister(등록 취소)에 대한 API 참조를 참조하세요.

앱은 Unregister(등록 취소) 외에 BackgroundTaskDeferral.Complete도 호출해야 합니다. 이렇게 하면 백그라운드 작업에 연결된 비동기 작업이 완료되었다는 알림이 시스템으로 전송됩니다.