백그라운드에서 무기한 실행

사용자에게 최상의 환경을 제공하기 위해 Windows는 UWP(유니버설 Windows 플랫폼) 앱에 대한 리소스 제한을 적용합니다. 포그라운드 앱에는 가장 많은 메모리와 실행 시간이 제공되며, 백그라운드 앱은 더 적습니다. 따라서 사용자는 포그라운드 앱의 성능 저하 및 배터리 사용량의 많은 소모로부터 보호됩니다.

하지만 UWP 앱을 개인용(즉, Microsoft Store에 게시되지 않는 사이드로드된 앱)으로 작성하는 개발자 또는 엔터프라이즈 UWP 앱을 작성하는 개발자는 백그라운드 또는 확장 실행 제한 없이 디바이스에서 사용할 수 있는 모든 리소스를 사용하려고 할 수 있습니다. 기간 업무 및 개인 UWP 애플리케이션은 Windows 크리에이터스 업데이트(버전 1703)의 API를 사용하여 제한 기능을 해제할 수 있습니다. 이러한 API를 사용하는 경우 앱을 Microsoft Store에 게시할 수 없습니다.

최소화된 상태에서 실행하기

UWP 앱이 포그라운드에서 실행되지 않을 때 일시 중단된 상태로 이동합니다. 데스크톱에서는 사용자가 앱을 최소화할 때 발생합니다. 앱은 최소화된 상태에서 계속 실행하기 위해 확장 실행 세션을 사용합니다. Microsoft Store에서 허용하는 확장 실행 API는 확장 실행을 사용하여 앱 일시 중단 연기에 세부적으로 나와 있습니다.

Microsoft Store에 제출하지 않는 앱을 개발하는 경우 디바이스의 에너지 상태에 관계없이 앱이 최소화된 상태로 계속 실행될 수 있도록 extendedExecutionUnconstrained 제한된 접근 권한 값이 있는 ExtendedExecutionForegroundSession을 사용할 수 있습니다.  

extendedExecutionUnconstrained 접근 권한 값은 제한된 접근 권한 값으로 앱의 매니페스트에 추가됩니다. 제한된 접근 권한 값에 대한 자세한 내용은 앱 접근 권한 값 선언을 참조하세요.

참고 항목

xmlns:rescap XML 네임스페이스 선언을 추가하고, rescap 접두사를 사용하여 접근 권한 값을 선언합니다.

제한된 접근 권한 값에 대한 자세한 내용은 앱 접근 권한 값 선언을 참조하세요.

Package.appxmanifest

<Package
    ...
    xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
    IgnorableNamespaces="uap mp rescap">
  ...
  <Capabilities>
    <rescap:Capability Name="extendedExecutionUnconstrained"/>
  </Capabilities>
</Package>

extendedExecutionUnconstrained 접근 권한 값을 사용하면 ExtendedExecutionForegroundSessionExtendedExecutionForegroundReasonExtendedExecutionSessionExtendedExecutionReason 대신 사용됩니다. 세션을 생성하고, 멤버를 설정하고, 확장을 비동기적으로 요청하기 위한 동일한 패턴이 계속 적용됩니다.

var newSession = new ExtendedExecutionForegroundSession();
newSession.Reason = ExtendedExecutionForegroundReason.Unconstrained;
newSession.Description = "Long Running Processing";
newSession.Revoked += SessionRevoked;
ExtendedExecutionForegroundResult result = await newSession.RequestExtensionAsync();
switch (result)
{
    case ExtendedExecutionForegroundResult.Allowed:
        DoLongRunningWork();
        break;

    default:
    case ExtendedExecutionForegroundResult.Denied:
        DoShortRunningWork();
        break;
}

앱이 포그라운드로 오자마자 이 확장 실행 세션을 요청할 수 있습니다. 제한되지 않은 확장 실행 세션은 에너지 할당량이나 운영 체제 배터리 절약 모드에 의해 제한되지 않습니다. 세션 개체에 대한 참조가 존재하는 한 앱은 실행 상태를 유지하고 일시 중단된 상태가 되지 않습니다. 앱이 사용자에 의해 닫히면 세션이 취소됩니다.

Revoked 이벤트에 등록하면 앱에서 필요한 정리 작업을 수행할 수 있습니다. 일시 중단된 상태에서 ExtendedExecutionReason.SavingData가 있는 확장 실행 세션을 만들어 앱이 종료되고 메모리에서 제거되기 전에 사용자 데이터를 저장할 수 있습니다.

백그라운드 작업 무기한 실행

유니버설 Windows 플랫폼에서 백그라운드 작업은 사용자 인터페이스 없이 백그라운드에서 실행되는 프로세스입니다. 백그라운드 작업은 일반적으로 취소되기 전에 최대 25초 동안 실행될 수 있습니다. 장기 실행 작업 중 일부에는 백그라운드 작업이 유휴 상태이거나 메모리를 사용하고 있지 않은지 확인하는 검사가 있습니다. Windows 크리에이터스 업데이트(버전 1703)에서 extendedBackgroundTaskTime 제한된 접근 권한 값은 이러한 제한을 제거하기 위해 도입되었습니다. extendedBackgroundTaskTime 접근 권한 값이 제한된 접근 권한 값으로 앱의 매니페스트 파일에 추가됩니다.

참고 항목

xmlns:rescap XML 네임스페이스 선언을 추가하고, rescap 접두사를 사용하여 접근 권한 값을 선언합니다.

제한된 접근 권한 값에 대한 자세한 내용은 앱 접근 권한 값 선언을 참조하세요.

Package.appxmanifest

<Package
    ... 
    xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
    IgnorableNamespaces="uap mp rescap">
...
  <Capabilities>
    <rescap:Capability Name="extendedBackgroundTaskTime"/>
  </Capabilities>
</Package>

이 접근 권한 값은 실행 시간 제한과 유휴 작업 감시를 제거합니다. 트리거 또는 앱 서비스 호출에 의해 백그라운드 작업이 시작되고 Run 메서드에서 제공하는 BackgroundTaskInstance에 지연이 있으면 무기한 실행될 수 있습니다. 앱이 Windows에서 관리됨으로 설정된 경우 여전히 앱에 적용된 에너지 할당량을 가질 수 있으며, 배터리 절약 모드가 활성화되어 있을 때 해당 백그라운드 작업은 활성화되지 않습니다. 이는 OS 설정으로 변경할 수 있습니다. 자세한 내용은 백그라운드 작업 최적화에서 확인할 수 있습니다.

유니버설 Windows 플랫폼은 백그라운드 작업 실행을 모니터링하여 배터리 수명을 늘리고 원활한 포그라운드 앱 환경을 보장합니다. 그러나 개인 앱 및 엔터프라이즈 기간 업무 앱은 확장 실행과 extendedBackgroundTaskTime 기능을 사용하여 디바이스의 리소스 가용성에 관계없이 필요한 만큼 실행되는 앱을 만들 수 있습니다.

extendedExecutionUnconstrainedextendedBackgroundTaskTime 기능은 UWP 앱의 기본 정책을 재정의할 수 있으며 배터리를 상당히 소모할 수 있습니다. 이러한 기능을 사용하기 전에 먼저 기본 확장 실행 및 백그라운드 작업 시간 정책이 요구 사항을 충족하지 않은지 확인하고, 배터리 제한 조건에서 테스트를 수행하여 앱이 디바이스에 미칠 영향을 파악합니다.

참고 항목

백그라운드 작업 리소스 제한 제거