백그라운드 작업 실행 조건 설정

중요 API

백그라운드 작업이 실행되는 시간을 제어하는 조건을 설정하는 방법을 알아봅니다.

경우에 따라 백그라운드 작업을 성공적으로 수행하려면 특정한 조건을 충족해야 합니다. 백그라운드 작업을 등록할 경우 SystemConditionType에서 지정한 조건 중 한 개 이상을 지정할 수 있습니다. 트리거가 실행되면 조건을 확인합니다. 그런 다음 백그라운드 작업이 큐에 보관되지만 모든 필요한 조건이 충족될 때에만 실행됩니다.

백그라운드 작업에 조건을 설정하면 작업이 불필요하게 실행되지 않으므로 배터리 사용 시간과 CPU가 절약됩니다. 예를 들어 백그라운드 작업이 타이머로 실행되고 인터넷에 연결되어야 하는 경우, 작업을 등록하기 전에 InternetAvailable 조건을 TaskBuilder에 추가하세요. 이렇게 하면 타이머가 종료되었고 인터넷 사용이 가능한 경우에만 백그라운드 작업을 실행해서, 작업 시 시스템 리소스 및 배터리 수명이 불필요하게 사용되는 것을 방지할 수 있습니다.

동일한 TaskBuilder에서 AddCondition을 여러 번 호출하여 여러 조건을 결합할 수도 있습니다. 상충하는 조건(예: UserPresentUserNotPresent)을 추가하지 않도록 주의하세요.

SystemCondition 개체 생성

이 토픽에서는 이미 앱에 연결된 백그라운드 작업이 있고, taskBuilder라는 이름의 BackgroundTaskBuilder 개체를 생성하는 코드가 앱에 이미 포함되어 있다고 가정합니다. 먼저 백그라운드 작업을 생성해야 하는 경우 In-process 백그라운드 작업 생성 및 등록 또는 Out-of-process 백그라운드 작업 생성 및 등록을 참조하세요.

이 토픽은 Out-of-process에서 실행되는 백그라운드 작업은 물론 포그라운드 앱과 동일한 프로세스에서 실행되는 백그라운드 작업에도 적용됩니다.

조건을 추가하기 전에 백그라운드 작업이 실행되기 위해 충족해야 하는 조건을 나타낼 SystemCondition 개체를 만듭니다. 생성자에서 SystemConditionType 열거형 값으로 충족해야 하는 조건을 지정합니다.

다음 코드는 InternetAvailable 조건을 지정하는 SystemCondition 개체를 만듭니다.

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

백그라운드 작업에 SystemCondition 개체 추가

조건을 추가하려면 BackgroundTaskBuilder 개체에서 AddCondition 메서드를 호출한 다음, 해당 메서드에 SystemCondition 개체를 전달하세요.

다음 코드는 taskBuilder를 사용하여 InternetAvailable 조건을 추가합니다.

taskBuilder.AddCondition(internetCondition);
taskBuilder.AddCondition(internetCondition);
taskBuilder->AddCondition(internetCondition);

백그라운드 작업 등록

이제 Register 메서드를 사용하여 백그라운드 작업을 등록할 수 있으며, 지정한 조건을 충족하는 경우에만 백그라운드 작업이 시작됩니다.

다음 코드는 작업을 등록하고 그 결과로 생성되는 BackgroundTaskRegistration 개체를 저장합니다.

BackgroundTaskRegistration task = taskBuilder.Register();
Windows::ApplicationModel::Background::BackgroundTaskRegistration task{ recurringTaskBuilder.Register() };
BackgroundTaskRegistration ^ task = taskBuilder->Register();

참고 항목

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

백그라운드 작업에 여러 조건 배치

사용자의 앱은 여러 조건을 추가하기 위해 AddCondition 메서드를 여러 번 호출합니다. 이러한 호출은 작업 등록이 적용되기 전에 해야 합니다.

참고 항목

백그라운드 작업에 충돌하는 조건을 추가하지 않도록 주의하세요.

다음 코드 조각은 백그라운드 작업을 만들고 등록하는 컨텍스트 내의 여러 조건을 보여 줍니다.

// Set up the background task.
TimeTrigger hourlyTrigger = new TimeTrigger(60, false);

var recurringTaskBuilder = new BackgroundTaskBuilder();

recurringTaskBuilder.Name           = "Hourly background task";
recurringTaskBuilder.TaskEntryPoint = "Tasks.ExampleBackgroundTaskClass";
recurringTaskBuilder.SetTrigger(hourlyTrigger);

// Begin adding conditions.
SystemCondition userCondition     = new SystemCondition(SystemConditionType.UserPresent);
SystemCondition internetCondition = new SystemCondition(SystemConditionType.InternetAvailable);

recurringTaskBuilder.AddCondition(userCondition);
recurringTaskBuilder.AddCondition(internetCondition);

// Done adding conditions, now register the background task.

BackgroundTaskRegistration task = recurringTaskBuilder.Register();
// Set up the background task.
Windows::ApplicationModel::Background::TimeTrigger hourlyTrigger{ 60, false };

Windows::ApplicationModel::Background::BackgroundTaskBuilder recurringTaskBuilder;

recurringTaskBuilder.Name(L"Hourly background task");
recurringTaskBuilder.TaskEntryPoint(L"Tasks.ExampleBackgroundTaskClass");
recurringTaskBuilder.SetTrigger(hourlyTrigger);

// Begin adding conditions.
Windows::ApplicationModel::Background::SystemCondition userCondition{
    Windows::ApplicationModel::Background::SystemConditionType::UserPresent };
Windows::ApplicationModel::Background::SystemCondition internetCondition{
    Windows::ApplicationModel::Background::SystemConditionType::InternetAvailable };

recurringTaskBuilder.AddCondition(userCondition);
recurringTaskBuilder.AddCondition(internetCondition);

// Done adding conditions, now register the background task.
Windows::ApplicationModel::Background::BackgroundTaskRegistration task{ recurringTaskBuilder.Register() };
// Set up the background task.
TimeTrigger ^ hourlyTrigger = ref new TimeTrigger(60, false);

auto recurringTaskBuilder = ref new BackgroundTaskBuilder();

recurringTaskBuilder->Name           = "Hourly background task";
recurringTaskBuilder->TaskEntryPoint = "Tasks.ExampleBackgroundTaskClass";
recurringTaskBuilder->SetTrigger(hourlyTrigger);

// Begin adding conditions.
SystemCondition ^ userCondition     = ref new SystemCondition(SystemConditionType::UserPresent);
SystemCondition ^ internetCondition = ref new SystemCondition(SystemConditionType::InternetAvailable);

recurringTaskBuilder->AddCondition(userCondition);
recurringTaskBuilder->AddCondition(internetCondition);

// Done adding conditions, now register the background task.
BackgroundTaskRegistration ^ task = recurringTaskBuilder->Register();

설명

참고 항목

백그라운드 작업이 필요한 경우에만 실행되고 필요하지 않은 경우에는 실행되지 않도록 백그라운드 작업에 대한 조건을 선택합니다. 다양한 백그라운드 작업 조건에 대한 설명은 SystemConditionType을 참조하세요.