백그라운드 작업을 등록하는 방법(HTML)
[ 이 문서는 Windows 런타임 앱을 작성하는 Windows에서 8.x 및 Windows Phone 8.x 개발자를 대상으로 합니다. Windows 10용으로 개발하는 경우에는 최신 설명서를 참조하세요.]
대부분의 백그라운드 작업을 안전하게 등록하기 위해 재사용할 수 있는 함수를 만드는 방법을 알아봅니다. 이 항목에서는 백그라운드 작업을 등록하는 유틸리티 함수를 안내합니다. 이 유틸리티 함수는 작업을 여러 번 등록하기 전에 기존 등록을 확인하여 여러 번 등록과 관련된 문제를 방지하며 백그라운드 작업에 시스템 조건을 적용할 수 있습니다. 이 연습에는 이 유틸리티의 전체 작업 예제가 포함됩니다.
참고
Windows Phone 스토어 앱의 경우 백그라운드 작업을 등록하기 전에 RequestAccessAsync을(를) 호출해야 합니다. Windows에서는 앱이 잠금 화면에 있어야 하는 백그라운드 작업 집합을 실행하려는 경우에만 이 호출이 필요하지만 Phone에서는 백그라운드 작업을 등록하기 전에 이 메서드를 한 번 호출해야 합니다.
Windows Phone 앱을 계속 실행되는 올바로 해제한 후에는 업데이트가 업데이트 중인 후 앱이 시작될 때 RemoveAccess를 호출한 후 RequestAccessAsync를 호출합니다. 자세한 내용은 백그라운드 작업에 대한 지침(HTML)을 참조하세요.
알아야 할 사항
기술
사전 요구 사항
- 이 항목에서는 등록해야 할 백그라운드 작업이 준비되어 있다고 가정합니다(백그라운드 작업을 작성하는 방법에 대해서는 이 항목에서 설명하지 않음).
지침
단계 1: 함수 서명 정의
이 함수는 작업 진입점, 작업 이름, 미리 구성된 백그라운드 작업 트리거 및 백그라운드 작업에 대한 SystemCondition(옵션)을 받아들입니다. 이 함수는 BackgroundTaskRegistration 개체를 반환합니다.
function RegisterBackgroundTask(taskEntryPoint,
taskName,
trigger,
condition)
{
// We’ll add code to this function in subsequent steps.
}
단계 2: 기존 등록 확인
작업이 이미 등록되었는지 확인합니다. 작업이 여러 번 등록된 경우 작업이 트리거될 때마다 두 번 이상 실행되어 CPU 할당량이 초과되거나 예기치 않은 동작이 발생할 수 있기 때문에 이것을 확인해야 합니다.
기존 등록을 확인하려면 BackgroundTaskRegistration.AllTasks 속성을 쿼리하고 결과를 반복합니다. 각 인스턴스의 이름을 확인합니다. 이 이름이 등록하려는 작업의 이름과 일치하는 경우 루프를 종료하고 플래그 변수를 설정하여 코드에서 다음 단계에는 다른 경로를 선택할 수 있게 합니다.
참고 앱에 고유한 백그라운드 작업 이름을 사용하세요. 각 백그라운드 작업의 이름이 고유해야 합니다.
다음 코드에서는 마지막 단계에서 만든 SystemTrigger를 사용하여 백그라운드 작업을 등록합니다.
function RegisterBackgroundTask(taskEntryPoint,
taskName,
trigger,
condition)
{
//
// Check for existing registrations of this background task.
//
var taskRegistered = false;
var background = Windows.ApplicationModel.Background;
var iter = background.BackgroundTaskRegistration.allTasks.first();
var hascur = iter.hasCurrent;
while (hascur) {
var cur = iter.current.value;
if (cur.name === taskName) {
taskRegistered = true;
break;
}
hascur = iter.moveNext();
}
// We’ll register the task in the next step.
}
단계 3: 백그라운드 작업 등록(또는 기존 등록 반환)
작업이 기존 백그라운드 작업 등록 목록에 있는지 확인합니다. 그럴 경우 작업의 해당 인스턴스를 반환합니다.
그런 다음 새 BackgroundTaskBuilder 개체를 사용하여 작업을 등록합니다. 이 코드에서는 조건 매개 변수가 null인지 확인하고 그렇지 않으면 등록 개체에 조건을 추가해야 합니다. BackgroundTaskBuilder.Register 함수에서 반환된 BackgroundTaskRegistration을 반환합니다.
참고
Windows 8.1부터 백그라운드 작업 등록 매개 변수는 등록 시 유효성이 검사됩니다. 등록 매개 변수가 하나라도 유효하지 않으면 오류가 반환됩니다. 백그라운드 작업 등록이 실패할 경우 앱에서 시나리오를 처리할 수 있어야 합니다. 예를 들어 조건문을 사용하여 등록 오류를 확인한 다음 다른 매개 변수 값을 사용하여 실패한 등록을 다시 시도해야 합니다.
다음 예제에서는 기존 작업을 반환하거나 백그라운드 작업(선택적 시스템 조건(있는 경우) 포함)을 등록하는 코드를 추가합니다.
function RegisterBackgroundTask(taskEntryPoint,
taskName,
trigger,
condition)
{
//
// Check for existing registrations of this background task.
//
var taskRegistered = false;
var background = Windows.ApplicationModel.Background;
var iter = background.BackgroundTaskRegistration.allTasks.first();
var hascur = iter.hasCurrent;
while (hascur) {
var cur = iter.current.value;
if (cur.name === taskName) {
taskRegistered = true;
break;
}
hascur = iter.moveNext();
}
//
// If the task is already registered, return the registration object.
//
if (taskRegistered == true) {
return iter.current;
}
//
// Register the background task.
//
var builder = new background.BackgroundTaskBuilder();
builder.Name = taskName;
builder.TaskEntryPoint = taskEntryPoint;
builder.setTrigger(trigger);
if (condition != null) {
builder.addCondition(condition);
}
var task = builder.register();
return task;
}
전체 백그라운드 작업 등록 유틸리티 함수
다음 예제에서는 완성된 백그라운드 작업 등록 함수를 보여 줍니다. 이 함수는 네트워킹 백그라운드 작업을 제외하고 대부분의 백그라운드 작업을 등록하는 데 사용할 수 있습니다.
//
// Register a background task with the specified taskEntryPoint, name, trigger,
// and condition (optional).
//
// taskEntryPoint: Task entry point for the background task.
// taskName: A name for the background task.
// trigger: The trigger for the background task.
// condition: Optional parameter. A conditional event that must be true for the task to fire.
//
function RegisterBackgroundTask(taskEntryPoint,
taskName,
trigger,
condition)
{
//
// Check for existing registrations of this background task.
//
var taskRegistered = false;
var background = Windows.ApplicationModel.Background;
var iter = background.BackgroundTaskRegistration.allTasks.first();
var hascur = iter.hasCurrent;
while (hascur) {
var cur = iter.current.value;
if (cur.name === taskName) {
taskRegistered = true;
break;
}
hascur = iter.moveNext();
}
//
// If the task is already registered, return the registration object.
//
if (taskRegistered == true) {
return iter.current;
}
//
// Register the background task.
//
var builder = new background.BackgroundTaskBuilder();
builder.Name = taskName;
builder.TaskEntryPoint = taskEntryPoint;
builder.setTrigger(trigger);
if (condition != null) {
builder.addCondition(condition);
}
var task = builder.register();
return task;
}