다음을 통해 공유


취소된 백그라운드 작업을 처리하는 방법(HTML)

[ 이 문서는 Windows 런타임 앱을 작성하는 Windows에서 8.x 및 Windows Phone 8.x 개발자를 대상으로 합니다. Windows 10용으로 개발하는 경우에는 최신 설명서를 참조하세요.]

백그라운드 작업 인스턴스 및 영구적 저장소를 통해 앱에 취소를 보고하여 취소 요청을 인식하고 작업을 중지하는 백그라운드 작업을 만드는 방법을 알아봅니다.

참고  Windows Phone 스토어 앱에서는 장치의 메모리가 부족해지면 백그라운드 작업이 경고 없이, OnCanceled 이벤트가 발생하지 않고 종료될 수 있습니다. 이는 포그라운드에서 앱의 사용자 환경을 확인하는 데 도움이 됩니다. 백그라운드 작업은 이 시나리오를 처리하도록 설계되어야 합니다.

알아야 할 사항

기술

사전 요구 사항

지침

단계 1: 이벤트 처리기를 사용하여 취소 요청 인식

취소 이벤트를 처리하는 메서드를 씁니다.

  1. 다음과 같은 공간을 가진 OnCanceled 메서드를 만듭니다. 이 메서드는 백그라운드 작업에 대한 취소 요청이 생성될 때마다 Windows 런타임에서 호출되는 진입점입니다.

    OnCanceled 함수는 다음과 같은 공간이 있어야 합니다.

    
    function onCanceled(cancelSender, cancelReason)
    {
        // TODO: Add code to notify the background task that it is cancelled.
    }
    
  2. cancel이라는 변수를 백그라운드 작업에 추가합니다. 이 변수는 취소 요청이 수신되는 시점을 가리키는 데 사용됩니다.

    예를 들어 IBackgroundTask 클래스의 맨 위에 다음 코드 줄을 다른 변수 정의와 함께 놓습니다.

    var cancel = false;
    
  3. 1단계에서 만든 OnCanceled 메서드에서 canceltrue로 설정합니다.

    전체 백그라운드 작업 샘플 OnCanceled 메서드는 canceltrue로 설정합니다.

    function onCanceled(cancelSender, cancelReason) {
        cancel = true;
    }
    
  4. 작업을 백그라운드 작업에서 시작하기 전에 "취소된" 이벤트 수신기로 OnCanceled 메서드를 등록합니다.

    예를 들면 다음 코드 줄을 사용합니다.

    
    backgroundTaskInstance.addEventListener("canceled", onCanceled);
    

단계 2: 취소 처리 및 종료

Run 메서드가 cancel 변수를 모니터링해야 하므로 변수가 true로 설정되면 이 메서드는 끝날 수 있습니다.

  1. cancel이 true로 설정되면 백그라운드 작업 클래스의 코드를 수정하여 작업을 중지합니다.

    백그라운드 작업 샘플(영문)에는 백그라운드 작업이 취소될 경우 추기적 타이머 콜백을 중지하는 검사가 포함되어 있습니다.

    
    if (!cancel) {
        // Do work.
    }
    else
    {
        // Cancel.
    }
    
  2. 작업이 중지되면 백그라운드 작업 인스턴스의 succeeded 속성을 false로 설정하여 지우고 작업이 취소되었음을 기록합니다. close()를 호출하여 함수를 종료합니다.

    백그라운드 작업 샘플(영문)에서는 LocalSettings에 상태를 기록합니다.

    
    if ((_cancelRequested == false) && (_progress < 100))
    {
        // See the background task sample for this code.
    }
    else
    {
        //
        // If the cancellation handler indicated that the task was canceled, stop the background task.
        //
        console.log("Background " + backgroundTaskInstance.task.name + " Canceled");
        backgroundTaskInstance.succeeded = false;
    
        key = backgroundTaskInstance.task.taskId.toString();
        settings.values[key] = "Canceled";
    
        close();
    }
    

설명

백그라운드 작업 샘플(영문)을 다운로드하여 메서드 컨텍스트에서 이러한 코드 예제를 확인할 수 있습니다.

설명을 위해 위의 샘플 코드에서는 백그라운드 작업 샘플(영문)에서 백그라운드 작업과 콜백 타이머의 일부만 표시합니다.

Run 메서드 예

컨텍스트에 대한 백그라운드 작업 샘플(영문)의 전체 JavaScript 백그라운드 작업은 아래와 같습니다.

//
// A JavaScript background task runs a specified JavaScript file.
//
(function () {
    "use strict";

    //
    // The background task instance's activation parameters are available via Windows.UI.WebUI.WebUIBackgroundTaskInstance.current
    //
    var cancel = false,
        progress = 0,
        backgroundTaskInstance = Windows.UI.WebUI.WebUIBackgroundTaskInstance.current;

    console.log("Background " + backgroundTaskInstance.task.name + " Starting...");

    //
    // Associate a cancellation handler with the background task.
    //
    function onCanceled(cancelSender, cancelReason) {
        cancel = true;
    }
    backgroundTaskInstance.addEventListener("canceled", onCanceled);

    //
    // This function is set to run every 1000 milliseconds ten times and perform background task activity.
    //
    function onTimer() {
        var key = null,
            settings = Windows.Storage.ApplicationData.current.localSettings;

        if (!cancel) {
            if (progress < 100) {
                //
                // Simulate work being done.
                //
                setTimeout(onTimer, 1000);

                //
                // Indicate progress to the foreground application.
                //
                backgroundTaskInstance.progress = progress;
                progress += 10;
            } else {
                //
                // Use the succeeded property to indicate that this background task completed successfully.
                //
                backgroundTaskInstance.succeeded = true;
                backgroundTaskInstance.progress = progress;
                console.log("Background " + backgroundTaskInstance.task.name + " Completed");

                //
                // Write to localSettings to indicate that this background task completed.
                //
                key = backgroundTaskInstance.task.name;
                settings.values[key] = "Completed";

                //
                // A JavaScript background task must call close when it is done.
                //
                close();
            }
        } else {
            //
            // If the cancellation handler indicated that the task was canceled, stop the background task.
            //
            console.log("Background " + backgroundTaskInstance.task.name + " Canceled");
            backgroundTaskInstance.succeeded = false;

            key = backgroundTaskInstance.task.taskId.toString();
            settings.values[key] = "Canceled";

            close();
        }
    }

    //
    // Start the timer function to simulate background task work.
    //
    setTimeout(onTimer, 1000);
})();

관련 항목

빠른 시작: 백그라운드 작업 만들기 및 등록

백그라운드 작업을 등록하는 방법

백그라운드 작업을 디버그하는 방법

백그라운드 작업을 사용하여 앱 지원

보류 중인 백그라운드 작업 목록을 가져오는 방법

백그라운드 작업 진행 및 완료를 모니터링하는 방법

응용 프로그램 매니페스트에서 백그라운드 작업을 선언하는 방법

백그라운드 작업에 대한 지침 및 검사 목록