다음을 통해 공유


백그라운드 작업을 이용한 앱 지원

이 섹션의 토픽에서는 트리거에 대한 응답으로 백그라운드에서 간단한 코드를 실행하는 방법을 보여줍니다. 앱이 일시 중단되었거나 실행되지 않을 때 기능이 제공되도록 백그라운드 작업을 사용할 수 있습니다. VOIP, 메일, IM 등의 실시간 통신 앱에 백그라운드 작업을 사용할 수도 있습니다.

백그라운드에서 미디어 재생하기

Windows 10 버전 1607부터는 백그라운드에서 오디오를 재생하는 것이 훨씬 쉽습니다. 자세한 내용은 백그라운드에서 미디어 재생하기를 참조하세요.

In-process 백그라운드 작업 및 Out-of-process 백그라운드 작업

백그라운드 작업을 구현하는 두 가지 접근 방식이 있습니다.

  • In-process: 앱과 해당 백그라운드 프로세스가 동일한 프로세스에서 실행됩니다.
  • Out-of-process: 앱과 백그라운드 프로세스가 별개의 프로세스에서 실행됩니다.

백그라운드 작업 작성을 간소화하기 위해 Windows 10 버전 1607에 In-process 백그라운드 지원이 도입되었습니다. 하지만 여전히 Out-of-process 백그라운드 작업을 작성할 수 있습니다. In-process 및 Out-of-process 백그라운드 작업을 작성하는 시기에 대한 권장 사항은 백그라운드 작업 관련 지침을 참조하세요.

Out-of-process 백그라운드 작업의 경우 오류가 발생해도 백그라운드 프로세스로 인해 앱 프로세스가 중단되는 일이 없기 때문에 훨씬 복원성이 큽니다. 그러나 복원성이 큰 대신 앱과 백그라운드 작업의 프로세스 간 통신 관리가 더 복잡합니다.

Out-of-process 백그라운드 작업은 OS가 별도의 프로세스(backgroundtaskhost.exe)에서 실행되는 IBackgroundTask 인터페이스를 구현하는 경량 클래스로 구현됩니다. BackgroundTaskBuilder 클래스를 사용하여 백그라운드 작업을 등록합니다. 이 클래스 이름은 백그라운드 작업 등록 시 진입점을 지정하는 데 사용됩니다.

Windows 10 버전 1607에서는 백그라운드 작업을 생성하지 않고도 백그라운드 활동을 사용하도록 설정할 수 있습니다. 대신 포그라운드 애플리케이션의 프로세스 내에서 직접 백그라운드 코드를 실행할 수 있습니다.

In-process 백그라운드 작업을 빠르게 시작하려면 In-process 백그라운드 작업 생성 및 등록을 참조하세요.

Out-of-process 백그라운드 작업을 빠르게 시작하려면 Out-of-process 백그라운드 작업 생성 및 등록을 참조하세요.

 Windows 10부터는 백그라운드 작업 등록의 필수 조건으로서 잠금 화면에 앱을 배치할 필요가 더 이상 없습니다.

시스템 이벤트에 대한 백그라운드 작업

앱은 SystemTrigger 클래스로 백그라운드 작업을 등록해서 시스템 생성 이벤트에 응답할 수 있습니다. 앱은 다음 시스템 이벤트 트리거(SystemTriggerType에 정의됨) 중 하나를 사용할 수 있습니다.

트리거 이름 설명
InternetAvailable 인터넷 사용이 가능해집니다.
NetworkStateChange 네트워크 변경(예: 비용 또는 연결의 변경)이 발생합니다.
OnlineIdConnectedStateChange 계정에 연결된 온라인 ID가 변경됩니다.
SmsReceived 설치된 모바일 광대역 디바이스가 새 SMS 메시지를 수신합니다.
TimeZoneChange 표준 시간대는 디바이스에서 변경됩니다(예: 시스템이 일광 절약 시간에 맞게 시계를 조정하는 경우).

자세한 내용은 백그라운드 작업으로 시스템 이벤트에 응답하기를 참조하세요.

백그라운드 작업의 조건

조건을 추가하면 백그라운드 작업이 트리거된 후에도 백그라운드 작업이 실행되는 시기를 조절할 수 있습니다. 백그라운드 작업은 일단 트리거되면 모든 조건이 충족될 때까지 실행되지 않습니다. 사용할 수 있는 조건(SystemConditionType 열거형으로 표시됨)은 다음과 같습니다.

조건 이름 설명
InternetAvailable 인터넷 사용이 가능해야 합니다.
InternetNotAvailable 인터넷 사용이 불가능해야 합니다.
SessionConnected 세션이 연결되어야 합니다.
SessionDisconnected 세션 연결이 끊겨야 합니다.
UserNotPresent 사용자가 멀리 떨어져 있어야 합니다.
UserPresent 사용자가 현장에 있어야 합니다.

백그라운드 작업에 InternetAvailable 조건을 추가BackgroundTaskBuilder.AddCondition하여 네트워크 스택이 실행될 때까지 백그라운드 작업의 트리거를 지연시킵니다. 네트워크가 가동되어야 백그라운드 작업이 실행되기 때문에 이 조건을 적용하면 전원이 절약됩니다. 이 조건은 실시간 정품 인증을 제공하지 않습니다.

백그라운드 작업에 네트워크 연결이 필요한 경우 IsNetworkRequested를 설정하여 백그라운드 작업이 실행되는 동안 네트워크 가동을 유지해야 합니다. 이렇게 하면 디바이스가 연결된 대기 상태 모드인 경우에도 작업 실행 중 네트워크를 계속 유지하도록 백그라운드 작업 인프라에 지시할 수 있습니다. 백그라운드 작업에서 IsNetworkRequested를 설정하지 않으면 연결된 대기 상태 모드(예: 휴대폰 화면이 꺼져 있는 경우)에서 백그라운드 작업이 네트워크에 액세스할 수 없습니다. 백그라운드 작업 조건에 대한 자세한 내용은 백그라운드 작업 실행 조건 설정 참조하세요.

애플리케이션 매니페스트 요건

앱이 Out-of-process로 실행되는 백그라운드 작업을 성공적으로 등록하려면 먼저 애플리케이션 매니페스트에서 해당 작업을 선언해야 합니다. 호스트 앱과 동일한 프로세스로 실행되는 백그라운드 작업은 애플리케이션 매니페스트에서 선언할 필요가 없습니다. 자세한 내용은 애플리케이션 매니페스트에서 백그라운드 작업 선언하기를 참조하세요.

백그라운드 작업

다음 실시간 트리거를 사용하면 백그라운드에서 간단한 사용자 지정 코드를 실행할 수 있습니다.

실시간 트리거 설명
컨트롤 채널 백그라운드 작업에서는 ControlChannelTrigger를 사용해서 연결을 활성 상태로 유지하고 컨트롤 채널에서 메시지를 수신할 수 있습니다. 앱이 소켓을 수신 중인 경우에는 ControlChannelTrigger 대신 소켓 브로커를 사용할 수 있습니다. 소켓 브로커 사용 방법에 대한 자세한 내용은 SocketActivityTrigger를 참조하세요. ControlChannelTrigger는 Windows Phone에서 지원되지 않습니다.
타이머 백그라운드 작업은 최대 15분마다 실행될 수 있으며, TimeTrigger를 사용해서 특정 시간에 실행되도록 설정할 수 있습니다. 자세한 내용은 타이머에서 백그라운드 작업 실행하기를 참조하세요.
푸시 알림 백그라운드 작업은 PushNotificationTrigger에 응답하여 원시 푸시 알림을 받습니다.

참고  

유니버설 Windows 앱은 백그라운드 트리거 유형을 어떤 것이든 등록하기 전에 RequestAccessAsync를 호출해야 합니다.

업데이트를 배포한 후에도 유니버설 Windows 앱이 계속해서 제대로 실행되게 하려면, 업데이트 후 앱이 시작될 때 RemoveAccess를 호출한 다음 RequestAccessAsync를 호출하세요. 자세한 내용은 백그라운드 작업 지침을 참조하세요.

트리거 인스턴스 수에 대한 제한: 앱에서 등록할 수 있는 일부 트리거의 인스턴스 수에 대한 제한이 있습니다. 앱은 앱 인스턴스당 ApplicationTrigger, MediaProcessingTriggerDeviceUseTrigger를 한 번씩만 등록할 수 있습니다. 앱이 이 제한을 초과하는 경우 등록이 예외를 throw합니다.

시스템 이벤트 트리거

SystemTriggerType 열거형은 다음 시스템 이벤트 트리거를 나타냅니다.

트리거 이름 설명
UserPresent 이 백그라운드 작업은 사용자가 있을 때 트리거됩니다.
UserAway 이 백그라운드 작업은 사용자가 없을 때 트리거됩니다.
ControlChannelReset 이 백그라운드 작업은 컨트롤 채널이 초기화되었을 때 트리거됩니다.
SessionConnected 이 백그라운드 작업은 세션이 연결되어 있을 때 트리거됩니다.

  다음 시스템 이벤트는 사용자가 앱을 이동시켰거나 잠금 화면을 해제했을 때 신호를 트리거합니다.

트리거 이름 설명
LockScreenApplicationAdded 앱 타일이 잠금 화면에 추가됩니다.
LockScreenApplicationRemoved 앱 타일이 잠금 화면에서 제거됩니다.

 

백그라운드 작업 리소스 제약 조건

백그라운드 작업은 간단합니다. 백그라운드 실행을 최소한으로 유지하면 포그라운드 앱 및 배터리 수명을 포함하는 사용자 환경이 최상의 상태가 됩니다. 이는 백그라운드 작업에 리소스 제약 조건을 적용함으로써 실행됩니다.

백그라운드 작업은 벽시계 사용 시간이 30초로 제한됩니다.

메모리 제약 조건

메모리 용량이 적은 디바이스의 리소스 제약 조건 때문에 백그라운드 작업에는 백그라운드 작업에서 사용할 수 있는 최대 메모리 용량을 결정하는 메모리 한도가 있을 수 있습니다. 백그라운드 작업이 이 한도를 초과하는 작업을 시도하면 작업이 실패하게 되며 메모리 부족 예외(해당 작업에서 처리할 수 있음)가 발생할 수 있습니다. 작업에서 메모리 부족 예외를 처리하지 않거나, 시도된 작업의 특성이 메모리 부족 예외가 발생하지 않은 것에 해당한다면 작업이 즉시 종료됩니다.

MemoryManager API를 사용하면 현재의 메모리 사용량 및 한도를 쿼리하여 상한(있는 경우)를 검색하고, 백그라운드 작업의 진행 중인 메모리 사용량을 모니터링할 수 있습니다.

메모리 용량이 적은 디바이스에 대한 백그라운드 작업이 있는 앱의 디바이스별 제한

메모리가 제한된 디바이스에서는 디바이스에 설치하고 지정된 시간에 백그라운드 작업을 사용할 수 있는 앱의 수가 제한되어 있습니다. 이 숫자를 초과하면 RequestAccessAsync(모든 백그라운드 작업의 등록에 필요함)에 대한 호출이 실패합니다.

배터리 절약 모드

배터리 절약 모드가 켜져 있을 때 백그라운드 작업을 실행하고 푸시 알림을 받을 수 있도록 앱을 제외한 경우를 제외하면, 디바이스가 외부 전원에 연결되지 않고 배터리가 잔여 전력의 지정된 양 미만으로 떨어지면 배터리 절약 모드 기능(활성화된 경우)이 백그라운드 작업이 실행되지 않게 합니다. 이렇게 하면 백그라운드 작업을 등록할 수 없게 됩니다.

그러나 엔터프라이즈 앱과 Microsoft Store에 게시되지 않을 앱의 경우 무기한 백그라운드에서 실행을 참조하여 백그라운드 작업 또는 확장된 실행 세션을 백그라운드에서 무기한 실행하는 기능을 사용하는 방법을 알아봅니다.

실시간 통신을 위한 백그라운드 작업 리소스 보장

리소스 할당량이 실시간 통신 기능을 방해하지 않게 하려면 ControlChannelTriggerPushNotificationTrigger를 사용하는 백그라운드 작업이 실행 중인 모든 작업에 대해 보장된 CPU 리소스 할당량을 받아야 합니다. 리소스 할당량은 위에 명시된 대로이며, 이 백그라운드 작업들에 대해 상수로 유지됩니다.

앱은 ControlChannelTriggerPushNotificationTrigger 백그라운드 작업에 대해 보장된 리소스 할당량을 가져오기 위해 다른 작업을 수행할 필요가 없습니다. 시스템은 이러한 작업을 항상 중요한 백그라운드 작업으로 처리합니다.

유지 관리 트리거

유지 관리 작업은 디바이스가 AC 전원에 연결된 경우에만 실행됩니다. 자세한 내용은 유지 관리 트리거 사용하기를 참조하세요.

센서 및 디바이스에 대한 백그라운드 작업

앱은 DeviceUseTrigger 클래스를 사용하여 백그라운드 작업에서 센서 및 주변 디바이스에 액세스할 수 있습니다. 이 트리거는 장기 작업(예: 데이터 동기화 또는 모니터링)에 사용할 수 있습니다. 시스템 이벤트 관련 작업과 달리 DeviceUseTrigger 작업은 앱이 포그라운드에서 실행되는 동안에만 트리거될 수 있으며, 이에 대해 조건을 설정할 수는 없습니다.

Important

DeviceUseTriggerDeviceServicingTrigger는 In-process 백그라운드 작업과 함께 사용할 수 없습니다.

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

백그라운드 작업 관리하기

백그라운드 작업에서는 이벤트 및 로컬 스토리지를 사용하여 진행, 완료 및 취소를 앱에 보고할 수 있습니다. 앱으로 백그라운드 작업에서 발생한 예외를 캐치하고, 앱 업데이트 중에 백그라운드 작업 등록을 관리할 수도 있습니다. 자세한 내용은 다음 항목을 참조하세요.

취소된 백그라운드 작업 처리
백그라운드 작업 진행 및 완료 모니터링

앱 실행 중에 백그라운드 작업 등록을 확인합니다. BackgroundTaskBuilder.AllTasks에 앱의 그룹 해제된 백그라운드 작업이 있는지 확인합니다. 없는 백그라운드 작업을 다시 등록합니다. 더 이상 필요 없는 작업의 등록을 취소합니다. 그러면 앱이 실행될 때마다 모든 백그라운드 작업 등록이 최신 상태로 유지됩니다.

Windows 10의 멀티태스킹에 대한 개념적 지침

관련 백그라운드 작업 지침