유지 관리 트리거 사용Use a maintenance trigger

중요 APIImportant APIs

장치가 연결 되어 있는 동안 MaintenanceTrigger 클래스를 사용 하 여 백그라운드에서 경량 코드를 실행 하는 방법에 대해 알아봅니다.Learn how to use the MaintenanceTrigger class to run lightweight code in the background while the device is plugged in.

유지 관리 트리거 개체 만들기Create a maintenance trigger object

이 예에서는 장치가 연결 되어 있는 동안 백그라운드에서 실행 하 여 앱을 향상 시킬 수 있는 경량 코드가 있다고 가정 합니다.This example assumes that you have lightweight code you can run in the background to enhance your app while the device is plugged in. 이 항목에서는 Systemtrigger유사한 MaintenanceTrigger에 중점을 둘 수 있습니다.This topic focuses on the MaintenanceTrigger, which is similar to SystemTrigger.

백그라운드 작업 클래스 작성에 대 한 자세한 내용은 in-process 백그라운드 작업 만들기 및 등록 또는 In-process 백그라운드 작업 생성 및 등록에서 사용할 수 있습니다.More information on writing a background task class is available in Create and register an in-process background task or Create and register an out-of-process background task.

MaintenanceTrigger 개체를 만듭니다.Create a new MaintenanceTrigger object. 두 번째 매개 변수인 OneShot는 유지 관리 작업을 한 번만 실행할지 아니면 정기적으로 실행할지를 지정 합니다.The second parameter, OneShot, specifies whether the maintenance task will run only once or continue to run periodically. OneShot 가 true로 설정 된 경우 첫 번째 매개 변수 (FreshnessTime)는 백그라운드 작업을 예약 하기 전에 대기할 시간 (분)을 지정 합니다.If OneShot is set to true, the first parameter (FreshnessTime) specifies the number of minutes to wait before scheduling the background task. OneShot 가 false로 설정 된 경우 FreshnessTime 는 백그라운드 작업을 실행할 빈도를 지정 합니다.If OneShot is set to false, FreshnessTime specifies how often the background task will run.

참고

FreshnessTime 을 15 분 미만으로 설정 하면 백그라운드 작업을 등록 하려고 할 때 예외가 throw 됩니다.If FreshnessTime is set to less than 15 minutes, an exception is thrown when attempting to register the background task.

이 예제 코드는 한 시간에 한 번 실행 되는 트리거를 만듭니다.This example code creates a trigger that runs once an hour.

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);

필드 조건 추가(Optional) Add a condition

  • 필요한 경우 백그라운드 작업 조건을 만들어 태스크가 실행 되는 시기를 제어 합니다.If necessary, create a background task condition to control when the task runs. 조건을 충족 하면 조건이 충족 될 때까지 백그라운드 작업이 실행 되지 않습니다. 자세한 내용은 백그라운드 작업을 실행 하기 위한 조건 설정 을 참조 하세요.A condition prevents your background task from running until the condition is met - for more information, see Set conditions for running a background task

이 예제에서 조건은 인터넷을 사용할 수 있을 때 (또는 사용할 수 있게 되 면) 유지 관리가 실행 되도록 Internetavailable 로 설정 됩니다.In this example, the condition is set to InternetAvailable so that maintenance runs when the Internet is available (or when it becomes available). 가능한 백그라운드 작업 조건 목록은 SystemConditionType를 참조 하세요.For a list of possible background task conditions, see SystemConditionType.

다음 코드는 유지 관리 작업 빌더에 조건을 추가 합니다.The following code adds a condition to the maintenance task builder:

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

백그라운드 작업 등록Register the background task

  • 백그라운드 작업 등록 함수를 호출 하 여 백그라운드 작업을 등록 합니다.Register the background task by calling your background task registration function. 백그라운드 작업 등록에 대 한 자세한 내용은 백그라운드 작업 등록을 참조 하세요.For more information on registering background tasks, see Register a background task.

다음 코드는 유지 관리 작업을 등록 합니다.The following code registers the maintenance task. 백그라운드 작업은를 지정 하므로 응용 프로그램에서 별도의 프로세스를 실행 하는 것으로 가정 합니다 entryPoint .Note that it assumes your background task runs in a separate process from your app because it specifies entryPoint. 백그라운드 태스크가 앱과 동일한 프로세스에서 실행 되는 경우을 지정 하지 않습니다 entryPoint .If your background task runs in the same process as your app, you do not specify 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);

참고

데스크톱을 제외한 모든 장치 패밀리의 경우 장치의 메모리가 부족 해지면 백그라운드 작업이 종료 될 수 있습니다.For all device families except desktop, if the device becomes low on memory, background tasks may be terminated. 메모리 부족 예외가 표시 되지 않거나 앱에서 처리 하지 않는 경우 백그라운드 작업은 경고 없이 종료 되 고 OnCanceled 이벤트를 발생 시 키 지 않습니다.If an out of memory exception is not surfaced, or the app does not handle it, then the background task will be terminated without warning and without raising the OnCanceled event. 이를 통해 포그라운드에서 앱의 사용자 환경을 보장할 수 있습니다.This helps to ensure the user experience of the app in the foreground. 백그라운드 작업은이 시나리오를 처리 하도록 디자인 되어야 합니다.Your background task should be designed to handle this scenario.

참고

유니버설 Windows 플랫폼 앱은 백그라운드 트리거 형식을 등록 하기 전에 Requestaccessasync 를 호출 해야 합니다.Universal Windows Platform apps must call RequestAccessAsync before registering any of the background trigger types.

앱에 대 한 업데이트를 릴리스된 후에도 유니버설 Windows 앱이 제대로 실행 되도록 하려면 Removeaccess 를 호출한 다음 앱이 업데이트 된 후에 시작 될 때 requestaccessasync 를 호출 해야 합니다.To ensure that your Universal Windows app continues to run properly after you release an update to your app, you must call RemoveAccess and then call RequestAccessAsync when your app launches after being updated. 자세한 내용은 백그라운드 작업에 대 한 지침을 참조 하세요.For more information, see Guidelines for background tasks.

참고

등록 시 백그라운드 작업 등록 매개 변수의 유효성이 검사 됩니다.Background task registration parameters are validated at the time of registration. 등록 매개 변수가 잘못 된 경우 오류가 반환 됩니다.An error is returned if any of the registration parameters are invalid. 앱이 백그라운드 작업 등록에 실패 하는 시나리오를 정상적으로 처리 하는지 확인 합니다. 대신 앱이 작업 등록을 시도한 후 유효한 등록 개체가 있는 경우 충돌이 발생할 수 있습니다.Ensure that your app gracefully handles scenarios where background task registration fails - if instead your app depends on having a valid registration object after attempting to register a task, it may crash.