애플리케이션 매니페스트에서 백그라운드 작업 선언

중요 API

앱 매니페스트에서 백그라운드 작업을 확장으로 선언하여 사용할 수 있습니다.

Important

이 문서는 Out-of-process 백그라운드 작업에만 적용됩니다. In-process 백그라운드 작업은 매니페스트에서 선언되지 않습니다.

Out-of-process 백그라운드 작업은 앱 매니페스트에서 선언해야 합니다. 그렇지 않으면 앱에서 등록할 수 없습니다(예외가 발생함). 또한 인증을 통과하려면 애플리케이션 매니페스트에서 Out-of-process 백그라운드 작업을 선언해야 합니다.

이 토픽에서는 사용자가 백그라운드 작업 클래스를 한 개 이상 생성했으며, 사용자의 앱이 한 개 이상의 트리거에 대한 응답으로 실행될 각 백그라운드 작업을 등록한다고 가정합니다.

수동으로 확장 추가

애플리케이션 매니페스트(Package.appxmanifest)를 열고 Application(애플리케이션) 요소로 이동하세요. Extensions(확장) 요소를 생성하세요(아직 하나도 없는 경우).

다음 코드 조각은 백그라운드 작업 샘플에서 가져옵니다.

<Application Id="App"
   ...
   <Extensions>
     <Extension Category="windows.backgroundTasks" EntryPoint="Tasks.SampleBackgroundTask">
       <BackgroundTasks>
         <Task Type="systemEvent" />
         <Task Type="timer" />
       </BackgroundTasks>
     </Extension>
     <Extension Category="windows.backgroundTasks" EntryPoint="Tasks.ServicingComplete">
       <BackgroundTasks>
         <Task Type="systemEvent"/>
       </BackgroundTasks>
     </Extension>
   </Extensions>
 </Application>

백그라운드 작업 확장 추가

첫 번째 백그라운드 작업을 선언하세요.

이 코드를 Extensions(확장) 요소로 복사하세요(다음 단계에서 특성을 추가합니다).

<Extensions>
    <Extension Category="windows.backgroundTasks" EntryPoint="">
      <BackgroundTasks>
        <Task Type="" />
      </BackgroundTasks>
    </Extension>
</Extensions>
  1. 백그라운드 작업namespace.classname)을 등록할 때 코드를 통해 진입점과 동일한 문자열을 사용하도록 EntryPoint 특성을 변경하세요.

    이 예제에서 진입점은 ExampleBackgroundTaskNameSpace.ExampleBackgroundTaskClassName입니다.

<Extensions>
    <Extension Category="windows.backgroundTasks" EntryPoint="Tasks.ExampleBackgroundTaskClassName">
       <BackgroundTasks>
         <Task Type="" />
       </BackgroundTasks>
    </Extension>
</Extensions>
  1. 이 백그라운드 작업에 사용되는 작업 등록 유형이 표시되도록 작업 유형 특성 목록을 변경하세요. 백그라운드 작업이 여러 트리거 유형으로 등록된 경우, 각 유형에 대해 다른 작업 요소 및 유형 특성을 추가하세요.

    참고 사용 중인 트리거 유형을 각각 나열해야 합니다. 그렇지 않으면 백그라운드 작업이 선언되지 않은 트리거 유형에 등록되지 않습니다(Register(등록) 메서드가 실패하고 예외가 적용됨).

    이 코드 조각 예제는 시스템 이벤트 트리거 및 푸시 알림의 사용을 나타냅니다.

<Extension Category="windows.backgroundTasks" EntryPoint="Tasks.BackgroundTaskClass">
    <BackgroundTasks>
        <Task Type="systemEvent" />
        <Task Type="pushNotification" />
    </BackgroundTasks>
</Extension>

여러 백그라운드 작업 확장 추가

앱에서 등록한 각각의 추가 백그라운드 작업 클래스에 대해 2단계를 반복하세요.

다음 예제는 백그라운드 작업 샘플의 전체 Application(애플리케이션) 요소입니다. 이 예제는 트리거 유형이 총 3개인 백그라운드 작업 클래스 2개를 사용하는 방법을 보여 줍니다. 애플리케이션 매니페스트에서 백그라운드 작업을 선언하려면 이 예제의 Extensions(확장) 섹션을 복사한 후, 필요에 따라 수정하세요.

<Applications>
    <Application Id="App"
      Executable="$targetnametoken$.exe"
      EntryPoint="BackgroundTask.App">
        <uap:VisualElements
          DisplayName="BackgroundTask"
          Square150x150Logo="Assets\StoreLogo-sdk.png"
          Square44x44Logo="Assets\SmallTile-sdk.png"
          Description="BackgroundTask"

          BackgroundColor="#00b2f0">
          <uap:LockScreen Notification="badgeAndTileText" BadgeLogo="Assets\smalltile-Windows-sdk.png" />
            <uap:SplashScreen Image="Assets\Splash-sdk.png" />
            <uap:DefaultTile DefaultSize="square150x150Logo" Wide310x150Logo="Assets\tile-sdk.png" >
                <uap:ShowNameOnTiles>
                    <uap:ShowOn Tile="square150x150Logo" />
                    <uap:ShowOn Tile="wide310x150Logo" />
                </uap:ShowNameOnTiles>
            </uap:DefaultTile>
        </uap:VisualElements>

      <Extensions>
        <Extension Category="windows.backgroundTasks" EntryPoint="Tasks.SampleBackgroundTask">
          <BackgroundTasks>
            <Task Type="systemEvent" />
            <Task Type="timer" />
          </BackgroundTasks>
        </Extension>
        <Extension Category="windows.backgroundTasks" EntryPoint="Tasks.ServicingComplete">
          <BackgroundTasks>
            <Task Type="systemEvent"/>
          </BackgroundTasks>
        </Extension>
      </Extensions>
    </Application>
</Applications>

어디에서 백그라운드 작업이 실행될지 선언

어디에서 백그라운드 작업이 실행될지 지정할 수 있습니다.

  • 백그라운드 작업은 기본적으로 BackgroundTaskHost.exe 프로세스에서 실행됩니다.
  • 전경 응용 프로그램과 동일한 프로세스에서
  • 여러 백그라운드 작업을 동일한 호스팅 프로세스에 넣거나 다른 프로세스로 나누려면 ResourceGroup을 사용합니다.
  • 새 트리거가 실행될 때마다 리소스 제한(메모리, cpu)을 가져오는 새 프로세스로 백그라운드 프로세스를 실행하려면 SupportsMultipleInstances를 사용합니다.

전경 응용 프로그램과 동일한 프로세스에서 실행

다음은 포그라운드 애플리케이션과 동일한 프로세스에서 실행되는 백그라운드 작업을 선언하는 예제 XML입니다.

<Extensions>
    <Extension Category="windows.backgroundTasks" EntryPoint="ExecModelTestBackgroundTasks.ApplicationTriggerTask">
        <BackgroundTasks>
            <Task Type="systemEvent" />
        </BackgroundTasks>
    </Extension>
</Extensions>

EntryPoint를 지정하면 응용 프로그램에서 트리거가 실행될 때 지정된 메서드에 대한 콜백을 받습니다. EntryPoint를 지정하지 않으면 응용 프로그램에서 OnBackgroundActivated()를 통해 콜백을 받습니다. 자세한 내용은 In-process 백그라운드 작업 만들기 및 등록을 참조하세요.

어디에서 ResourceGroup 특성을 사용하여 백그라운드 작업을 실행할지 지정합니다.

다음은 BackgroundTaskHost.exe 프로세스에서 실행되는 백그라운드 작업을 동일한 앱의 다른 백그라운드 작업 인스턴스와는 별개의 프로세스로 선언하는 예제 XML입니다. 함께 실행할 백그라운드 작업을 식별하는 ResourceGroup 특성을 확인하세요.

<Extensions>
    <Extension Category="windows.backgroundTasks" EntryPoint="BackgroundTasks.SessionConnectedTriggerTask" ResourceGroup="foo">
      <BackgroundTasks>
        <Task Type="systemEvent" />
      </BackgroundTasks>
    </Extension>
    <Extension Category="windows.backgroundTasks" EntryPoint="BackgroundTasks.TimeZoneTriggerTask" ResourceGroup="foo">
      <BackgroundTasks>
        <Task Type="systemEvent" />
      </BackgroundTasks>
    </Extension>
    <Extension Category="windows.backgroundTasks" EntryPoint="BackgroundTasks.TimerTriggerTask" ResourceGroup="bar">
      <BackgroundTasks>
        <Task Type="timer" />
      </BackgroundTasks>
    </Extension>
    <Extension Category="windows.backgroundTasks" EntryPoint="BackgroundTasks.ApplicationTriggerTask" ResourceGroup="bar">
      <BackgroundTasks>
        <Task Type="general" />
      </BackgroundTasks>
    </Extension>
    <Extension Category="windows.backgroundTasks" EntryPoint="BackgroundTasks.MaintenanceTriggerTask" ResourceGroup="foobar">
      <BackgroundTasks>
        <Task Type="general" />
      </BackgroundTasks>
    </Extension>
</Extensions>

SupportsMultipleInstances 특성을 사용하여 트리거가 실행될 때마다 새 프로세스에서 실행

이 예에서는 새 트리거가 실행될 때마다 자체 리소스 제한(메모리 및 CPU)을 가져오는 새 프로세스에서 실행되는 백그라운드 작업을 선언합니다. SupportsMultipleInstances를 사용하면 이 동작이 활성화됩니다. 이 특성을 사용하려면 SDK 버전 '10.0.15063'(Windows 10 Creators Update) 이상을 대상으로 해야 합니다.

<Package
    xmlns:uap4="http://schemas.microsoft.com/appx/manifest/uap/windows10/4"
    ...
    <Applications>
        <Application ...>
            ...
            <Extensions>
                <Extension Category="windows.backgroundTasks" EntryPoint="BackgroundTasks.TimerTriggerTask">
                    <BackgroundTasks uap4:SupportsMultipleInstances="true">
                        <Task Type="timer" />
                    </BackgroundTasks>
                </Extension>
            </Extensions>
        </Application>
    </Applications>

참고 항목

SupportsMultipleInstances와 함께 ResourceGroup 또는 ServerName을 지정할 수 없습니다.