앱 활성화 처리 방법(HTML)

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

Windows 런타임 앱의 활성화 환경을 정의하는 방법을 알아봅니다.

앱을 시작할 때마다 activated 이벤트가 발생합니다. 이 이벤트는 앱이 실행 중인 동안 시스템이 새 활성화 계약과 관련된 앱 매개 변수를 전달해야 하는 경우에도 발생할 수 있습니다. activated 이벤트를 사용하여 앱의 이전 상태를 복원하고 앱을 활성화할 계약과 관련된 활성화 매개 변수를 검색할 수 있습니다. 활성화 계약 전체 목록과 해당 매개 변수에 대한 자세한 내용을 보려면 ActivationKind 열거형을 참조하세요.

다음 단계에서는 activated 이벤트를 등록하고, 일부 기본 앱 상태를 복원하는 데 사용하고, 타일에서 기본 활성화를 처리하는 데 사용하는 방법을 보여 줍니다.

지침

단계 1: 활성화된 이벤트 등록

activated 이벤트를 전역 범위에서 등록합니다. 이 예제에서는 activatedHandler를 활성화 처리기로 설정합니다. 활성화 처리기를 사용하면 앱의 이전 ApplicationExecution 상태와 활성화 인수를 검색할 수 있습니다. 활성화 유형 목록을 보려면 ActivationKind 열거형을 참조하세요.


var app = WinJS.Application;

app.addEventListener("activated", activatedHandler, false);
app.start();

단계 2: 앱이 일시 중단된 후 종료될 경우 응용 프로그램 데이터 복원

앱이 일시 중단된 후 운영 체제에서 여러 가지 이유로 앱을 종료할 수 있습니다. 몇 가지 예로는 사용자가 수동으로 앱을 닫거나, 사용자가 로그아웃하거나, 시스템 리소스가 부족한 경우를 들 수 있습니다. OS에서 앱을 종료한 후 사용자가 앱을 시작하면 앱이 activated 이벤트를 받습니다. sessionState 개체를 사용하여 앱의 데이터를 복원해야 하는지 또는 기본값으로 시작해야 하는지 확인합니다. sessionState 변수가 정의된 경우에는 이 변수를 사용하여 앱 데이터를 복원하고 표시된 콘텐츠를 새로 고칩니다. 정의되어 있지 않으면 기본값을 로드합니다.

또한 이벤트 인수에 대한 PreviousExecutionState 속성을 사용하여 앱이 상태를 복원해야 하는지도 확인할 수 있습니다. 이 속성이 ApplicationExecutionStateTerminated를 갖는 경우 상태를 복원해야 하고, 다른 값인 경우 앱 기본값을 로드해야 합니다.

참고   앱이 이미 실행 중인 동안 앱을 활성화하려면 저장된 데이터를 복원하지 않도록 주의해야 합니다.

 

function activatedHandler(eventArgs) {
   if (eventArgs.detail.kind == Windows.ApplicationModel.Activation.ActivationKind.launch) 
   {
      // Check whether my session state variables are valid.
      // If so, retrieve the application data saved in the checkpoint handler
      if (app.sessionState) 
      {
         // TODO: Populate the UI with the previously saved application data            
      } 
      else
      {
         // TODO: Populate the UI with defaults             
      }

   }
}

단계 3: 새 컴퓨터에서 시작한 경우 기존 보조 타일 쿼리

// Get secondary tile ids for the application and list them out

Windows.UI.StartScreen.SecondaryTile.findAllAsync().then(function (tiles) {
   if (tiles) {
      tiles.forEach(function (tile) {
         // Inspect the tile and do required work 
      });
   } 
   else {
      // there are no tiles 
      }
   });
}

단계 4: 활성화 인수 검색

시스템에서 앱을 활성화할 경우 활성화를 위한 추가 컨텍스트가 있을 수 있습니다.

각 활성화 계약 유형에는 앱을 활성화하는 이유에 대한 자세한 정보를 제공하는 고유한 매개 변수 집합이 있습니다. Windows.UI.WebUI 네임스페이스에는 각 계약에 대한 eventArgs 클래스가 정의되어 있습니다. 이 코드 조각은 기본 타일 시작에서 인수를 검색하는 방법을 보여 줍니다.

function activatedHandler(eventArgs) {
    if (eventArgs.detail.kind == Windows.ApplicationModel.Activation.ActivationKind.launch) 
    {
        if (eventArgs.detail.arguments !== '')
        {
            // TODO: Parse the arguments string
        }
    // Initialize the WinJS controls
    eventArgs.setPromise(WinJS.UI.processAll();)

    }
}

단계 5: 앱 UI 설정

초기 시작을 위해 활성화를 처리할 경우 시스템은 앱이 활성화를 완료할 때까지 시작 화면을 표시합니다. 경우에 따라 앱은 파일에서 설정을 읽는 등의 비동기 작업을 수행하여 UI를 적절히 초기화해야 할 수 있습니다. 이 작업은 UI가 완료될 때까지 시작 화면이 꺼지지 않도록 활성화 중에 수행해야 합니다. 활성화 eventArgs에서 setPromise() 메서드를 사용하여 활성화 완료를 연기할 수 있습니다. 이전 코드 조각에서는 setPromise()를 사용하여 processAll()에 대한 비동기 호출이 완료될 때까지 활성화 완료를 지연시킵니다.

Microsoft Visual Studio 템플릿을 사용하는 경우에는 setPromise()가 자동으로 호출됩니다. 시작 화면이 꺼지기 전에 완료해야 할 비동기 작업이 있는 경우에는 새 페이지 조각의 "처리된" 이벤트 중에 이 작업을 완료합니다. 이 비동기 활동에서 promise를 반환하여 활동이 완료될 때까지 "처리된" 이벤트의 완료를 연기해야 합니다. 앱이 특정 페이지 조각을 탐색할 때마다 처리된 이벤트가 호출되어 활성화 관련 코드가 활성화에 의해 트리거된 탐색 시에만 실행되도록 합니다. 일반적인 탐색 시에는 이 코드를 건너뛰어야 합니다.

참고  시작 화면은 초기 UI를 설정하는 데 필요한 매우 간단한 활동 중에만 표시되도록 되어 있습니다. 네트워크 호출 또는 디스크에서 대용량의 파일을 로드하는 등 시간이 오래 걸리는 활동은 활성화 중에 수행해서는 안 됩니다. 이러한 경우 앱은 백그라운드에서 비동기 작업을 계속 완료하는 동안 활성화 중에 진행 UI를 설정하거나 연장 시작 화면을 설정한 다음 활성화에서 즉시 돌아와야 합니다.

 

processed: function (element, options) {
            // During an initial activation this event is called before activation completes.
            // Do any initialization work that is required for the initial UI to be complete.
            // Retrieve settings from a file
            return app.local.readText(settingsFile, "default").then(function (str){
                //use the settings to update the UI
            }, function () {
                //handle the error condition
               });
           },

ready:     function (element, options) {
            // During an initial activation this event is called after activation completes.
            // Do any initialization work that is not related to getting the initial UI set up.
           }

설명

앱이 시작되면 DOMContentLoaded 이벤트 이후, WinJS.Application.onloaded 이벤트 이전에 활성화된 이벤트가 발생합니다. 앱이 실행되고 있으면 활성화된 이벤트는 언제든지 발생할 수 있습니다.

참고  앱이 어떤 이유로든 최상위 수준 문서를 탐색해야 하는 경우 최상위 수준 탐색을 수행하려면 먼저 활성화를 완료해야 합니다. 활성화가 완료되기 전에 최상위 수준 탐색을 시도하면 앱이 크래시됩니다. 따라서 탐색하는 동안 JavaScript 컨텍스트를 분해하여 다시 만들기 전에 앱과 시스템이 일관된 상태가 됩니다.

 

참고  

Windows Phone 스토어 앱에서는 앱이 현재 일시 중단되었으며 사용자가 기본 타일이나 앱 목록에서 앱을 다시 시작하는 경우에도 resuming 이벤트 뒤에 항상 activated 이벤트가 발생합니다. 현재 창에 이미 설정된 콘텐츠가 있는 경우 앱에서 초기화를 건너뛸 수 있습니다. LaunchActivatedEventArgs.TileId 속성을 검사하여 앱이 기본 타일에서 시작되었는지 또는 보조 타일에서 시작되었는지 확인할 수 있으며, 해당 정보에 따라 새로운 환경을 표시할지 또는 앱 환경을 다시 시작할지 결정할 수 있습니다.

전체 예제

앱 수명 주기 이벤트 처리 방법을 보여 주는 전체 코드 예제를 보려면 WinJS를 사용한 앱 활성화 및 일시 중단 샘플WRL을 사용하는 앱 활성화, 다시 시작 및 일시 중단 샘플을 참조하세요.

관련 항목

작업

앱 일시 중단 방법

앱 다시 시작 방법

개념

응용 프로그램 수명 주기

참조

Windows.ApplicationModel.Activation.ActivationKind

Windows.UI.WebUI.WebUILaunchActivatedEventArgs

WinJS.Application.activated