다음을 통해 공유


타이머에서 백그라운드 작업 실행

TimeTrigger를 사용하여 일회성 백그라운드 작업을 예약하거나 주기적인 백그라운드 작업을 실행하는 방법을 알아봅니다.

이 항목에 설명된 시간 트리거 백그라운드 작업을 구현하는 방법의 예제를 보려면 백그라운드 활성화 샘플Scenario4 참조하세요.

이 항목에서는 주기적으로 또는 특정 시간에 실행해야 하는 백그라운드 작업이 있다고 가정합니다. 백그라운드 작업이 아직 없는 경우, BackgroundActivity.cs에 샘플 백그라운드 작업이 있습니다. 또는 프로세스 내 백그라운드 작업을 만들고 등록하는 방법 또는 프로세스 외 백그라운드 작업을 만들고 등록하는 방법을 따라 하나를 만드십시오.

시간 트리거 만들기

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

데스크톱 또는 모바일 디바이스 패밀리를 대상으로 하는 UWP(유니버설 Windows 플랫폼) 앱의 기본 제공 타이머는 15분 간격으로 백그라운드 작업을 실행합니다. (타이머는 15분 간격으로 실행되므로 시스템이 TimerTriggers를 요청한 앱을 깨우기 위해 15분마다 한 번만 절전 모드 해제하면 전원이 절약됩니다.)

  • FreshnessTime이 15분으로 설정되고 OneShot이 true이면, 작업이 등록된 시점으로부터 15분에서 30분 사이에 한 번 실행되도록 예약됩니다. 25분으로 설정되고 OneShot 이 true이면 작업이 등록된 시간부터 25분에서 40분 사이에 한 번 실행되도록 예약됩니다.

  • FreshnessTime 15분으로 설정되고 OneShot이 false인 경우 작업이 등록된 시점부터 15분에서 30분 사이에 시작하여 15분마다 실행되도록 예약됩니다. n분으로 설정되고 OneShot 이 false이면 작업이 등록된 후 n분에서 n + 15분 사이에 시작되는 n분마다 실행되도록 예약됩니다.

비고

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

예를 들어 이 트리거는 백그라운드 작업이 한 시간에 한 번 실행되도록 합니다.

TimeTrigger hourlyTrigger = new TimeTrigger(60, false);
Windows::ApplicationModel::Background::TimeTrigger hourlyTrigger{ 60, false };
TimeTrigger ^ hourlyTrigger = ref new TimeTrigger(60, false);

(선택 사항) 조건 추가

백그라운드 작업 조건을 만들어 작업이 실행되는 시기를 제어할 수 있습니다. 조건은 조건이 충족될 때까지 백그라운드 작업이 실행되지 않도록 합니다. 자세한 내용은 백그라운드 작업실행하기 위한 조건 설정 참조하세요.

이 예제에서는 조건이 UserPresent 로 설정되므로 트리거되면 사용자가 활성 상태인 경우에만 작업이 실행됩니다. 가능한 조건 목록은 SystemConditionType참조하세요.

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

백그라운드 트리거의 조건 및 유형에 대한 보다 깊은 정보는 배경 작업을 활용하여 앱 지원하기 및을 참조하세요.

RequestAccessAsync() 함수를 호출하십시오

ApplicationTrigger 백그라운드 작업을 등록하기 전에, 사용자가 허용하는 백그라운드 작업 수준을 결정하기 위해 RequestAccessAsync를 호출하세요. 이는 사용자가 앱에 대한 백그라운드 활동을 비활성화했을 수 있기 때문입니다. 사용자가 백그라운드 활동의 설정을 제어할 수 있는 방법에 대한 자세한 내용은 백그라운드 작업 최적화를 참조하세요.

var requestStatus = await Windows.ApplicationModel.Background.BackgroundExecutionManager.RequestAccessAsync();
if (requestStatus != BackgroundAccessStatus.AlwaysAllowed)
{
    // Depending on the value of requestStatus, provide an appropriate response
    // such as notifying the user which functionality won't work as expected
}

백그라운드 작업 등록

백그라운드 작업 등록 함수를 호출하여 백그라운드 작업을 등록합니다. 자세한 백그라운드 작업 등록 방법과 아래 샘플 코드에 있는 RegisterBackgroundTask() 메서드의 정의를 보려면 백그라운드 작업 등록을 참조하세요.

중요합니다

앱과 동일한 프로세스에서 실행되는 백그라운드 작업의 경우 설정 entryPoint하지 마세요. 앱과 별도의 프로세스에서 실행되는 백그라운드 작업의 경우 네임스페이스 '.'로 설정하고 백그라운드 작업 구현을 포함하는 클래스의 이름으로 설정합니다 entryPoint .

string entryPoint = "Tasks.ExampleBackgroundTaskClass";
string taskName   = "Example hourly background task";

BackgroundTaskRegistration task = RegisterBackgroundTask(entryPoint, taskName, hourlyTrigger, userCondition);
std::wstring entryPoint{ L"Tasks.ExampleBackgroundTaskClass" };
std::wstring taskName{ L"Example hourly background task" };

Windows::ApplicationModel::Background::BackgroundTaskRegistration task{
    RegisterBackgroundTask(entryPoint, taskName, hourlyTrigger, userCondition) };
String ^ entryPoint = "Tasks.ExampleBackgroundTaskClass";
String ^ taskName   = "Example hourly background task";

BackgroundTaskRegistration ^ task = RegisterBackgroundTask(entryPoint, taskName, hourlyTrigger, userCondition);

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

백그라운드 작업에 대한 리소스 관리

BackgroundExecutionManager.RequestAccessAsync 사용하여 사용자가 앱의 백그라운드 활동을 제한해야 한다고 결정했는지 확인합니다. 배터리 사용량에 유의하고 사용자가 원하는 작업을 완료해야 하는 경우에만 백그라운드에서 실행합니다. 사용자가 백그라운드 활동의 설정을 제어할 수 있는 방법에 대한 자세한 내용은 백그라운드 작업 최적화를 참조하세요.

  • 메모리: 앱의 메모리 및 에너지 사용 튜닝은 운영 체제에서 백그라운드 작업을 실행할 수 있도록 하는 데 중요합니다. 메모리 관리 API 사용하여 백그라운드 작업에서 사용 중인 메모리 양을 확인합니다. 백그라운드 작업에서 사용하는 메모리가 많을수록 다른 앱이 포그라운드에 있을 때 OS가 계속 실행되기 어렵습니다. 사용자는 궁극적으로 앱이 수행할 수 있는 모든 백그라운드 작업을 제어하고 앱이 배터리 사용에 미치는 영향을 파악할 수 있습니다.
  • CPU 시간: 백그라운드 작업은 트리거 유형에 따라 얻는 벽시계 사용 시간의 양으로 제한됩니다.

백그라운드 작업에 적용된 리소스 제약 조건에 대해서는 백그라운드 작업으로 앱을 지원하기를 참조하세요.

비고

Windows 10부터 사용자가 백그라운드 작업을 활용하기 위해 잠금 화면에 앱을 추가할 필요가 없습니다.

백그라운드 작업은 RequestAccessAsync를 먼저 호출한 경우에만 TimeTrigger를 사용하여 실행됩니다.