다음을 통해 공유


In-process 백그라운드 작업 만들기 및 등록

중요 API

이 토픽에서는 앱과 동일한 프로세스로 실행되는 백그라운드 작업을 생성하고 등록하는 방법을 보여 줍니다.

In-process 백그라운드 작업은 Out-of-process 백그라운드 작업보다 구현하기 더 간단합니다. 다만 이 작업의 복원력은 더 떨어집니다. In-process 백그라운드 작업에서 실행 중인 코드가 충돌하면 앱이 중단됩니다. 또한 DeviceUseTrigger, DeviceServicingTriggerIoTStartupTask는 In-process 모델과 사용할 수 없습니다. 애플리케이션 내에서 VoIP 백그라운드 작업을 활성화할 수도 없습니다. 이러한 트리거 및 작업은 Out-of-process 백그라운드 작업 모델에서도 계속 지원됩니다.

백그라운드 활동은 실행 시간 제한을 초과하여 실행되는 경우, 앱의 포그라운드 프로세스 내에서 실행되는 경우에도 종료될 수 있다는 점에 유의하세요. 어떤 목적에 따라서는 작업을 별도의 프로세스로 실행되는 백그라운드 작업으로 분리하는 복원력이 여전히 유용합니다. 백그라운드 작업을 포그라운드 애플리케이션과 별개의 작업으로 유지하는 것이 포그라운드 애플리케이션과의 통신이 필요하지 않은 작업에 가장 적합한 옵션일 수 있습니다.

기본 사항

In-process 모델은 앱이 포그라운드 또는 백그라운드에 있을 경우 개선된 알림으로 애플리케이션 수명 주기를 향상시킵니다. 이러한 전환을 위해 Application(애플리케이션) 개체에서 두 가지 새 이벤트, 즉 EnteredBackgroundLeavingBackground를 사용할 수 있습니다. 이 이벤트들은 애플리케이션의 표시 상태에 따라 애플리케이션 수명 주기에 적합해집니다. 이들 이벤트와 해당 이벤트가 앱 수명 주기에서 애플리케이션 수명 주기에 미치는 영향에 대해 자세히 읽어보세요.

높은 수준에서 EnteredBackground 이벤트를 처리하여 앱이 백그라운드에서 실행되는 동안 적용될 코드를 실행하고, 앱이 포그라운드로 이동한 시기를 알 수 있도록 LeavingBackground를 처리합니다.

백그라운드 작업 트리거 등록하기

In-process 백그라운드 활동은 Out-of-process 백그라운드 활동과 거의 동일하게 등록됩니다. 모든 백그라운드 트리거는 BackgroundTaskBuilder를 이용한 등록으로 시작됩니다. 작성기를 사용하면 필요한 모든 값을 한 곳에서 설정하여 백그라운드 작업을 쉽게 등록할 수 있습니다.

var builder = new BackgroundTaskBuilder();
builder.Name = "My Background Trigger";
builder.SetTrigger(new TimeTrigger(15, true));
// Do not set builder.TaskEntryPoint for in-process background tasks
// Here we register the task and work will start based on the time trigger.
BackgroundTaskRegistration task = builder.Register();

참고 항목

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

In-process 백그라운드 활동의 경우 TaskEntryPoint.를 설정해서는 안 됩니다. 이것을 공란으로 남겨 두면 OnBackgroundActivated()라는 Application(애플리케이션) 개체에서 보호되는 새 메서드인 기본 진입점을 사용할 수 있도록 설정됩니다.

트리거가 등록되면 SetTrigger 메서드의 트리거 집합 유형에 따라 해당 트리거가 실행됩니다. 위 예제에서는 TimeTrigger를 사용합니다. 이 트리거는 등록된 시점으로부터 15분 후에 실행됩니다.

작업의 실행 시기가 조절되도록 조건 추가하기(선택 사항)

트리거 이벤트가 발생한 후 작업이 실행되는 시기를 조절하기 위해 조건을 추가할 수 있습니다. 그 예로 사용자가 존재하게 될 때까지 작업을 실행하지 않으려면 UserPresent 조건을 사용하세요. 가능한 조건의 목록은 SystemConditionType을 참조하세요.

다음 샘플 코드는 사용자가 현장에 있도록 요구하는 조건을 할당합니다.

builder.AddCondition(new SystemCondition(SystemConditionType.UserPresent));

OnBackgroundActivated()에 백그라운드 활동 코드 넣기

OnBackgroundActivated에 백그라운드 작업 코드를 넣어 실행 시 백그라운드 트리거에 응답합니다. IBackgroundTask.Run과 똑같이 OnBackgroundActivated를 처리할 수 있습니다. 메서드에는 Run 메서드가 제공하는 모든 항목이 포함된 BackgroundActivatedEventArgs 매개 변수가 있습니다. 예를 들어 App.xaml.cs에서:

using Windows.ApplicationModel.Background;

...

sealed partial class App : Application
{
  ...

  protected override void OnBackgroundActivated(BackgroundActivatedEventArgs args)
  {
      base.OnBackgroundActivated(args);
      IBackgroundTaskInstance taskInstance = args.TaskInstance;
      DoYourBackgroundWork(taskInstance);  
  }
}

더 다양한 OnBackgroundActivated 예제는 호스트 앱과 동일한 프로세스에서 실행되도록 앱 서비스 변환을 참조하세요.

백그라운드 작업 진행 및 완료 처리하기

작업 진행 및 완료는 다중 프로세스 백그라운드 작업(백그라운드 작업 진행 및 완료 모니터링 참조)과 동일한 방식으로 모니터링할 수 있습니다. 다만 변수를 사용해서 앱으로 진행 또는 완료 상태를 추적하면 작업 진행 및 완료를 더 쉽게 추적할 수 있습니다. 이는 백그라운드 활동 코드가 앱과 동일한 프로세스로 실행되도록 할 때의 장점 중 하나입니다.

백그라운드 작업 취소 처리하기

In-process 백그라운드 작업은 Out-of-process 백그라운드 작업과 동일한 방식으로 취소됩니다(취소된 백그라운드 작업 처리하기 참조). 취소가 발생하기 전에 BackgroundActivated 이벤트 처리기를 종료해야 합니다. 그렇지 않으면 전체 프로세스가 종료됩니다. 백그라운드 작업을 취소할 때 포그라운드 앱이 예기치 않게 닫히는 경우, 취소가 발생하기 전에 처리기가 종료되었는지 확인하세요.

매니페스트

Out-of-process 백그라운드 작업과 달리, In-process 백그라운드 작업을 실행하기 위해서는 백그라운드 작업 정보를 패키지 매니페스트에 추가할 필요가 없습니다.

요약 및 다음 단계

이제 In-process 백그라운드 작업을 작성하는 방법의 기본 원칙을 이해해야 합니다.

API 참조, 백그라운드 작업 개념 지침, 백그라운드 작업을 사용하는 앱을 작성하기 위한 상세 지침은 다음 관련 토픽들을 참조하세요.

자세한 백그라운드 작업 지침 항목

백그라운드 작업 지침

백그라운드 작업 API 참조