ApplicationTrigger 사용하여 앱 내에서 백그라운드 작업을 활성화하는 방법을 알아봅니다.
애플리케이션 트리거를 만드는 방법에 대한 예제는 이 예제참조하세요.
이 항목에서는 애플리케이션에서 활성화하려는 백그라운드 작업이 있다고 가정합니다. 백그라운드 작업이 아직 없는 경우, BackgroundActivity.cs에 샘플 백그라운드 작업이 있습니다. 또는 만들기의 단계를 수행하고 out-of-process 백그라운드 작업 등록하여 만듭니다.
애플리케이션 트리거를 사용하는 이유
ApplicationTrigger 사용하여 포그라운드 앱과 별도의 프로세스에서 코드를 실행합니다. 사용자가 포그라운드 앱을 닫더라도 백그라운드에서 수행해야 하는 작업이 앱에 있는 경우 ApplicationTrigger 적합합니다. 앱이 닫힐 때 백그라운드 작업을 중단하거나 포그라운드 프로세스의 상태에 따라야 하는 경우, 대신 확장 실행 기능을 사용해야 합니다.
애플리케이션 트리거 만들기
새 ApplicationTrigger만듭니다. 아래 코드 조각에서 수행한 대로 필드에 저장할 수 있습니다. 이는 나중에 트리거에 신호를 보낼 때 새 인스턴스를 만들 필요가 없도록 편의를 위한 것입니다. 그러나 모든 ApplicationTrigger 인스턴스를 사용하여 트리거에 신호를 보낼 수 있습니다.
// _AppTrigger is an ApplicationTrigger field defined at a scope that will keep it alive
// as long as you need to trigger the background task.
// Or, you could create a new ApplicationTrigger instance and use that when you want to
// trigger the background task.
_AppTrigger = new ApplicationTrigger();
// _AppTrigger is an ApplicationTrigger field defined at a scope that will keep it alive
// as long as you need to trigger the background task.
// Or, you could create a new ApplicationTrigger instance and use that when you want to
// trigger the background task.
Windows::ApplicationModel::Background::ApplicationTrigger _AppTrigger;
// _AppTrigger is an ApplicationTrigger field defined at a scope that will keep it alive
// as long as you need to trigger the background task.
// Or, you could create a new ApplicationTrigger instance and use that when you want to
// trigger the background task.
ApplicationTrigger ^ _AppTrigger = ref new ApplicationTrigger();
(선택 사항) 조건 추가
백그라운드 작업 조건을 만들어 작업이 실행되는 시기를 제어할 수 있습니다. 조건은 조건이 충족될 때까지 백그라운드 작업이 실행되지 않도록 합니다. 자세한 내용은 백그라운드 작업실행하기 위한 조건 설정
이 예제에서 조건은 InternetAvailable 으로 설정되어 있으므로, 트리거된 후 인터넷에 액세스할 수 있는 경우에만 작업이 실행됩니다. 가능한 조건 목록은 SystemConditionType참조하세요.
SystemCondition internetCondition = new SystemCondition(SystemConditionType.InternetAvailable);
Windows::ApplicationModel::Background::SystemCondition internetCondition{
Windows::ApplicationModel::Background::SystemConditionType::InternetAvailable };
SystemCondition ^ internetCondition = ref new SystemCondition(SystemConditionType::InternetAvailable)
백그라운드 트리거의 조건 및 유형에 대한 보다 깊은 정보는 배경 작업을 활용하여 앱 지원하기 및을 참조하세요.
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() 메서드의 정의를 보려면 백그라운드 작업 등록을 참조하세요.
애플리케이션 트리거를 사용하여 포그라운드 프로세스의 수명을 연장하려는 경우 확장 실행 대신 사용하는 것이 좋습니다. 애플리케이션 트리거는 별도로 호스트된 프로세스를 만들어 작업을 수행하도록 설계되었습니다. 다음 코드 조각은 프로세스 외부의 백그라운드 트리거를 등록합니다.
string entryPoint = "Tasks.ExampleBackgroundTaskClass";
string taskName = "Example application trigger";
BackgroundTaskRegistration task = RegisterBackgroundTask(entryPoint, taskName, appTrigger, internetCondition);
std::wstring entryPoint{ L"Tasks.ExampleBackgroundTaskClass" };
std::wstring taskName{ L"Example application trigger" };
Windows::ApplicationModel::Background::BackgroundTaskRegistration task{
RegisterBackgroundTask(entryPoint, taskName, appTrigger, internetCondition) };
String ^ entryPoint = "Tasks.ExampleBackgroundTaskClass";
String ^ taskName = "Example application trigger";
BackgroundTaskRegistration ^ task = RegisterBackgroundTask(entryPoint, taskName, appTrigger, internetCondition);
백그라운드 작업 등록 매개 변수는 등록 시 유효성이 검사됩니다. 등록 매개 변수가 잘못된 경우 오류가 반환됩니다. 백그라운드 작업 등록이 실패하는 시나리오를 앱이 정상적으로 처리해야 합니다. 대신 앱이 작업 등록을 시도한 후 유효한 등록 개체를 갖는 데 의존하는 경우 작동이 중단될 수 있습니다.
백그라운드 작업 시작
백그라운드 작업을 트리거하기 전에 BackgroundTaskRegistration 사용하여 백그라운드 작업이 등록되었는지 확인합니다. 앱 시작 중에 모든 백그라운드 작업이 등록되었는지 확인하는 것이 좋습니다.
ApplicationTrigger.RequestAsync호출하여 백그라운드 작업을 트리거합니다. ApplicationTrigger 인스턴스라면 아무 것이나 가능합니다.
ApplicationTrigger.RequestAsync
var result = await _AppTrigger.RequestAsync();
백그라운드 작업에 대한 리소스 관리
BackgroundExecutionManager.RequestAccessAsync 사용하여 사용자가 앱의 백그라운드 활동을 제한해야 한다고 결정했는지 확인합니다. 배터리 사용량에 유의하고 사용자가 원하는 작업을 완료해야 하는 경우에만 백그라운드에서 실행합니다. 사용자가 백그라운드 활동의 설정을 제어할 수 있는 방법에 대한 자세한 내용은 백그라운드 작업 최적화를 참조하세요.
- 메모리: 앱의 메모리 및 에너지 사용 튜닝은 운영 체제에서 백그라운드 작업을 실행할 수 있도록 하는 데 중요합니다. 메모리 관리 API 사용하여 백그라운드 작업에서 사용 중인 메모리 양을 확인합니다. 백그라운드 작업에서 사용하는 메모리가 많을수록 다른 앱이 포그라운드에 있을 때 OS가 계속 실행되기 어렵습니다. 사용자는 궁극적으로 앱이 수행할 수 있는 모든 백그라운드 작업을 제어하고 앱이 배터리 사용에 미치는 영향을 파악할 수 있습니다.
- CPU 시간: 백그라운드 작업은 트리거 유형에 따라 얻는 벽시계 사용 시간의 양으로 제한됩니다. 애플리케이션 트리거에 의해 트리거되는 백그라운드 작업은 약 10분으로 제한됩니다.
백그라운드 작업에 적용된 리소스 제약 조건에 대해서는 백그라운드 작업으로 앱을 지원하기를 참조하세요.
비고
Windows 10부터 사용자가 백그라운드 작업을 활용하기 위해 잠금 화면에 앱을 추가할 필요가 없습니다.
백그라운드 작업은 RequestAccessAsync 먼저 호출한 경우에만 ApplicationTrigger 사용하여 실행됩니다.
관련 항목
- 백그라운드 작업에 대한 지침
- 백그라운드 태스크 코드 샘플
- 인프로세스 백그라운드 작업을 만들어서 등록합니다.
- 프로세스 외 백그라운드 작업 생성 및 등록
- 백그라운드 작업을 디버그
- 애플리케이션 매니페스트에서 백그라운드 작업 선언하기
- 앱이 백그라운드로 이동할 때 메모리를 해제하십시오
- 취소된 백그라운드 작업 처리하기
- UWP 앱에서 일시 중단, 다시 시작 및 백그라운드 이벤트를 트리거하는 방법(디버깅 시)
- 백그라운드 작업의 진행률과 완료를 모니터링하기
- 앱 일시 중단을 확장된 실행으로 연기하기
- 백그라운드 작업 등록
- 시스템 이벤트에 백그라운드 작업으로 응답하기
- 백그라운드 작업 실행하기 위한 조건 설정
- 백그라운드 작업에서 라이브 타일을 업데이트하기
- 유지 관리 트리거를 사용하십시오