유지 관리 트리거 사용

중요 API

디바이스가 연결되어 있는 동안 MaintenanceTrigger 클래스를 사용하여 경량 코드를 실행하는 방법을 알아봅니다.

유지 관리 트리거 개체 생성

이 예제에서는 디바이스가 연결되어 있는 동안 앱을 향상시키기 위해 백그라운드에서 실행할 수 있는 간단한 코드가 있다고 가정합니다. 이 토픽에서는 SystemTrigger와 유사한 MaintenanceTrigger를 중점적으로 다룹니다.

백그라운드 작업 클래스 작성에 대한 자세한 내용은 In-process 백그라운드 작업 생성 및 등록 또는 Out-of-process 백그라운드 작업 생성 및 등록에서 확인할 수 있습니다.

MaintenanceTrigger 개체를 생성하세요. 두 번째 매개변수인 OneShot은 유지 관리 작업이 한 번만 실행될지, 아니면 주기적으로 계속 실행될지 여부를 지정합니다. OneShot이 true로 설정된 경우, 첫 번째 매개변수(FreshnessTime)는 백그라운드 작업을 예약하기 전에 대기할 시간(분)을 지정합니다. OneShot이 false로 설정된 경우, FreshnessTime은 백그라운드 작업이 실행되는 빈도를 지정합니다.

참고 항목

FreshnessTime이 15분 미만으로 설정된 경우 백그라운드 작업을 등록하려고 하면 예외가 발생합니다.

이 예제 코드에서는 한 시간에 한 번 실행되는 트리거를 만듭니다.

uint waitIntervalMinutes = 60;
MaintenanceTrigger taskTrigger = new MaintenanceTrigger(waitIntervalMinutes, false);
uint32_t waitIntervalMinutes{ 60 };
Windows::ApplicationModel::Background::MaintenanceTrigger taskTrigger{ waitIntervalMinutes, false };
unsigned int waitIntervalMinutes = 60;
MaintenanceTrigger ^ taskTrigger = ref new MaintenanceTrigger(waitIntervalMinutes, false);

(선택 사항) 조건 추가

  • 필요한 경우 백그라운드 작업 조건을 생성해서 작업 실행 시기를 조절하세요. 조건은 해당 조건이 충족될 때까지 백그라운드 작업이 실행되지 않게 합니다. 자세한 내용은 백그라운드 작업 실행을 위한 조건 설정을 참조하세요.

이 예제에서는 조건이 InternetAvailable로 설정되므로, 인터넷 사용이 가능해지면(또는 사용할 수 있게 되면) 유지 관리가 실행됩니다. 가능한 백그라운드 작업 조건의 목록은 SystemConditionType을 참조하세요.

다음 코드는 유지 관리 작업 작성기에 조건을 추가합니다.

SystemCondition exampleCondition = new SystemCondition(SystemConditionType.InternetAvailable);
Windows::ApplicationModel::Background::SystemCondition exampleCondition{
    Windows::ApplicationModel::Background::SystemConditionType::InternetAvailable };
SystemCondition ^ exampleCondition = ref new SystemCondition(SystemConditionType::InternetAvailable);

백그라운드 작업 등록

  • 백그라운드 작업 등록 함수를 호출해서 백그라운드 작업을 등록하세요. 백그라운드 작업 등록에 대한 자세한 내용은 백그라운드 작업 등록을 참조하세요.

다음 코드는 유지 관리 작업을 등록합니다. 해당 백그라운드 작업이 entryPoint를 지정하기 때문에 앱과는 별개인 프로세스로 실행된다고 가정해 봅시다. 백그라운드 작업이 앱과 동일한 프로세스로 실행되는 경우에는 entryPoint를 지정하지 않습니다.

string entryPoint = "Tasks.ExampleBackgroundTaskClass";
string taskName   = "Maintenance background task example";

BackgroundTaskRegistration task = RegisterBackgroundTask(entryPoint, taskName, taskTrigger, exampleCondition);
std::wstring entryPoint{ L"Tasks.ExampleBackgroundTaskClass" };
std::wstring taskName{ L"Maintenance background task example" };

Windows::ApplicationModel::Background::BackgroundTaskRegistration task{
    RegisterBackgroundTask(entryPoint, taskName, taskTrigger, exampleCondition) };
String ^ entryPoint = "Tasks.ExampleBackgroundTaskClass";
String ^ taskName   = "Maintenance background task example";

BackgroundTaskRegistration ^ task = RegisterBackgroundTask(entryPoint, taskName, taskTrigger, exampleCondition);

참고 항목

데스크톱을 제외한 모든 디바이스 제품군의 경우 디바이스의 메모리가 적어지면 백그라운드 작업이 종료될 수 있습니다. 메모리 부족 예외가 발생하지 않거나 앱에서 이 현상을 처리하지 않으면 경고 없이, 그리고 OnCanceled 이벤트가 발생하지 않은 상태에서 백그라운드 작업이 종료됩니다. 이렇게 하면 포그라운드에서 앱의 사용자 환경을 보장할 수 있습니다. 백그라운드 작업은 이 시나리오를 처리하도록 설계되어야 합니다.

참고 항목

유니버설 Windows 플랫폼 앱은 백그라운드 트리거 형식을 등록하기 전에 RequestAccessAsync를 호출해야 합니다.

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

참고 항목

백그라운드 작업 등록 매개변수는 등록 시 유효성 검사를 거칩니다. 등록 매개변수 중 하나라도 유효하지 않으면 오류가 반환됩니다. 백그라운드 작업 등록이 실패하는 시나리오를 앱이 정상적으로 처리해야 합니다. 그 대신 앱이 작업 등록을 시도한 후 유효한 등록 개체를 갖는 데 의존할 경우에는 충돌이 발생할 수 있습니다.