유지 관리 트리거 사용하기
중요 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를 호출해야 합니다. 자세한 내용은 백그라운드 작업 지침을 참조하세요.
참고 항목
백그라운드 작업 등록 매개변수는 등록 시 유효성 검사를 거칩니다. 등록 매개변수 중 하나라도 유효하지 않으면 오류가 반환됩니다. 백그라운드 작업 등록이 실패하는 시나리오를 앱이 정상적으로 처리해야 합니다. 그 대신 앱이 작업 등록을 시도한 후 유효한 등록 개체를 갖는 데 의존할 경우에는 충돌이 발생할 수 있습니다.