다음을 통해 공유


유지 관리 트리거 사용

주요 API들

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

유지 관리 트리거 개체 만들기

이 예제에서는 디바이스가 연결되어 있는 동안 앱을 향상시키기 위해 백그라운드에서 실행할 수 있는 간단한 코드가 있다고 가정합니다. 이 항목은 MaintenanceTrigger에 대해 다루며, 이는 SystemTrigger과 유사합니다.

백그라운드 작업 클래스 작성에 대한 더 많은 정보는 프로세스 내 백그라운드 작업 생성 및 등록 또는 프로세스 외 백그라운드 작업 생성 및 등록에서 확인할 수 있습니다.

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 호출해야 합니다. 자세한 내용은 백그라운드 작업대한 지침을 참조하세요.

비고

백그라운드 작업 등록 매개 변수는 등록 시 유효성이 검사됩니다. 등록 매개 변수가 잘못된 경우 오류가 반환됩니다. 백그라운드 작업 등록이 실패하는 시나리오를 앱이 정상적으로 처리해야 합니다. 대신 앱이 작업 등록을 시도한 후 유효한 등록 개체를 갖는 데 의존하는 경우 작동이 중단될 수 있습니다.