앱 수명 주기

이 항목에서는 앱이 배포되어 제거될 때까지의 Windows 런타임 앱의 수명 주기에 대해 설명합니다. 앱을 적절하게 시작하고 일시 중단했다가 다시 시작하여 고객이 최대한 편리하게 앱을 사용할 수 있도록 해야 합니다.

앱 실행 상태

다음 그림은 앱 실행 상태의 전환을 나타냅니다. 다음에 나오는 여러 섹션에서 이러한 상태 및 이벤트에 대해 설명합니다. 각 상태 전환과 앱이 어떻게 응답해야 하는지에 대한 자세한 내용은 ApplicationExecutionState 열거형에 대한 참조 자료를 보세요.

앱 실행 상태의 전환을 보여 주는 상태 다이어그램

배포

어떤 방식으로든 앱을 활성화하려면 먼저 배포해야 합니다. 기본 배포는 사용자가 앱을 설치할 때 또는 개발자가 Visual Studio를 사용하여 개발 및 테스트 과정에서 로컬로 앱을 빌드 및 테스트할 때 이루어집니다. 이에 관한 자세한 내용과 고급 배포 시나리오는 앱 패키지 및 배포를 참조하세요.

앱 실행

앱은 사용자가 앱을 활성화하고 앱 프로세스의 이전 상태가 NotRunning 상태일 때마다 시작됩니다. 앱이 NotRunning 상태인 것은 시작된 적이 없거나 실행 후 충돌했거나 중지된 다음 메모리에 상주하지 못하고 시스템에 의해 종료되었기 때문일 수 있습니다.

앱이 실행되면 Windows는 앱에 대한 시작 화면을 표시합니다. 이 시작 화면을 구성하려면 “시작 화면 추가”를 참조하세요(HTML 또는 XAML).

시작 화면이 표시되는 동안 앱 코드는 앱이 사용자 인터페이스를 표시할 준비가 되었는지 사용자에게 확인해줘야 합니다. 앱의 주요 작업은 이벤트 처리기를 등록하고 앱이 첫 페이지를 로드하는 데 필요한 사용자 지정 UI를 설정하는 것입니다. 이 작업은 몇 초 정도밖에 걸리지 않습니다. 앱이 네트워크에서 데이터를 요청해야 하거나 디스크에서 대량의 데이터를 검색해야 하는 경우 이러한 작업은 활성화 외의 기간에 완료해야 합니다. 앱은 이러한 오래 실행되는 작업이 완료될 때까지 자체의 사용자 지정 로드 UI나 확장된 시작 화면을 사용할 수 있습니다. 자세한 내용은 "시작 화면을 연장하는 방법"(HTML 또는 XAML) 및 시작 화면 샘플을 참조하세요. 앱이 활성화를 완료하고 나면 Running 상태 및 시작 화면이 사라지고 모든 리소스와 개체가 지워집니다. 창 표시, 활성화 처리기에서 돌아오기, 지연 완료는 앱이 활성화를 완료하는 특정 방식입니다. 자세한 내용은 "앱을 활성화하는 방법"을 참조하세요(HTML 또는 XAML).

앱 활성화

사용자가 다양한 계약 및 확장을 통해 앱을 활성화할 수 있습니다. 활성화에 참여하려면 앱이 WinJS activated 이벤트(HTML)를 받거나 OnActivated 메서드를 재정의(XAML)하도록 등록해야 합니다. (HTML의 경우 WebUIApplication.activated은(는) 활성화에 대해 처리할 수 있는 또 다른 이벤트입니다.)

앱의 활성화 코드는 앱이 활성화되어 있는 이유와 이미 Running 상태인지 여부를 테스트를 통해 확인할 수 있습니다. 다음 활성화 유형 중 하나를 사용하여 앱을 활성화할 수 있습니다.

Activation type 설명
캐시된 파일사용자가 앱이 콘텐츠 관리 방식을 제공하는 파일을 저장하려고 합니다.
카메라사용자가 연결된 카메라로 사진 또는 동영상을 촬영하려고 합니다.
연락처 선택 기능사용자가 연락처를 선택하려고 합니다.
장치사용자가 앱이 자동 실행을 처리하도록 하려고 합니다.
파일사용자의 앱에서 이 앱이 처리하도록 등록된 파일 형식의 파일을 실행했습니다.
파일 열기 선택기사용자가 앱에서 제공한 파일이나 폴더를 선택하려고 합니다.
파일 저장 선택기사용자가 파일을 저장하려 하며 앱을 선택했습니다.
실행사용자가 앱을 실행했거나 콘텐츠 타일을 탭했습니다.
인쇄 작업사용자가 앱이 인쇄 작업을 처리하도록 하려고 합니다.
프로토콜사용자의 앱에서 이 앱이 처리하도록 등록된 프로토콜을 사용하는 URL을 실행했습니다.
검색사용자가 앱을 사용하여 검색하려고 합니다.
대상 공유사용자가 앱을 공유 작업을 대상으로 지정하려고 합니다.

 

Windows 8.1 이후 버전용으로 빌드된 앱은 위 모든 방법으로 활성화하거나 이러한 활성화 유형으로 활성화할 수 있습니다.

Activation type 설명
약속 추가사용자가 자신의 일정에 약속을 추가하려고 합니다. Windows Phone에서도 지원됩니다.
약속 제거사용자가 자신의 일정에서 약속을 제거하려고 합니다. Windows Phone에서도 지원됩니다.
약속 바꾸기사용자가 자신의 일정에서 약속을 바꾸려고 합니다. Windows Phone에서도 지원됩니다.
기간 표시사용자가 자신의 일정에 특정 기간을 표시하려고 합니다. Windows Phone에서도 지원됩니다.
연락처에 전화사용자가 연락처에 전화화려고 합니다.
연락처 매핑사용자가 연락처를 매핑(연락처의 위치 가져오기)하려고 합니다.
연락처 메시지사용자가 연락처에 메시지를 보내려고 합니다.
연락처 게시사용자가 연락처를 게시하려고 합니다.
연락처 화상 통화사용자가 연락처와 화상 통화를 하려고 합니다.
잠금 화면 통화사용자가 잠금 화면에서 통화를 수락하려고 합니다.
제한된 실행사용자가 제한된 앱을 실행했습니다.

 

다음 유형으로 Windows Phone 앱을 활성화할 수 있습니다.

Activation type 설명
VoiceCommand 음성 명령의 결과로 응용 프로그램이 활성화되었습니다.
PickerReturned 선택기 완료 후 응용 프로그램이 활성화되었습니다.
WalletAction 지갑 작업을 수행하도록 응용 프로그램이 활성화되었습니다.
PickFileContinuation 파일 선택기 작업을 위해 앱이 일시 중단된 후 응용 프로그램이 활성화되었습니다.
PickSaveFileContinuation 파일 저장 선택기 작업을 위해 앱이 일시 중단된 후 응용 프로그램이 활성화되었습니다.
PickFolderContinuation 폴더 선택기 작업을 위해 앱이 일시 중단된 후 응용 프로그램이 활성화되었습니다.
WebAuthenticationBrokerContinuation 웹 인증 브로커 작업을 위해 앱이 일시 중단된 후 응용 프로그램이 활성화되었습니다.

 

운영 체제에서 앱을 종료하고 이후에 사용자가 앱을 다시 시작하는 경우 앱은 활성화를 사용하여 이전에 저장된 데이터를 복원할 수 있습니다. Windows는 앱이 여러 이유로 일시 중단된 이후에 앱을 종료할 수 있습니다. 사용자가 수동으로 앱을 닫거나, 로그아웃하거나, 시스템의 리소스가 부족한 등이 이유가 될 수 있습니다. Windows에서 앱을 종료한 후 사용자가 앱을 시작하면 앱은 activated 이벤트(HTML) 또는 Application.OnActivated 콜백(XAML)을 받고 앱이 활성화될 때까지 앱의 시작 화면이 사용자에게 표시됩니다. 이 이벤트를 사용하여 앱이 마지막으로 일시 중단될 때 저장한 데이터를 복원해야 하는지 여부나 앱의 기본 데이터를 로드해야 하는지 여부를 결정할 수 있습니다. 시작 화면이 표시되기 때문에 앱 코드는 사용자에게 명확한 지연 없이 처리 시간을 벌 수 있지만 다시 시작하거나 계속하는 경우 이전에 언급한 장기 실행 작업에 관한 문제가 여전히 적용됩니다. activated/OnActivated 이벤트 데이터에는 앱이 활성화되기 전의 상태를 알려 주는 PreviousExecutionState 속성이 포함되어 있습니다. 이 속성은 ApplicationExecutionState 열거형의 값 중 하나입니다.

종료 이유 PreviousExecutionState 속성의 값수행할 작업
시스템이 종료함(예: 리소스 제한 때문)Terminated 세션 데이터 복원
사용자가 닫거나 사용자가 프로세스를 종료ClosedByUser 기본 데이터로 시작
예기치 않게 종료됨 또는 현재 사용자 세션 중 앱이 실행되지 않음NotRunning기본 데이터로 시작

 

참고  현재 사용자 세션은 Windows 로그온 기준입니다. 현재 사용자가 확실히 로그오프, 종료하거나 다른 이유로 Windows가 다시 시작되지 않는 한 잠금 화면 인증, 사용자 전환 등의 이벤트가 있어도 현재 사용자 세션이 유지됩니다.

PreviousExecutionState의 값이 Running 또는 Suspended일 수도 있지만 이 경우 앱이 이전에 종료되지 않은 것이므로 데이터를 복원할 필요가 없습니다.

참고  

컴퓨터의 Administrator 계정을 사용하여 로그온한 경우 Windows 런타임 앱을 활성화할 수 없습니다.

자세한 내용은 앱 확장을 참조하세요.

XAML 앱에서 OnActivated과(와) 특정 활성화 비교

XAML 활성화 모델 및 Application 클래스의 경우 OnActivated 메서드는 모든 가능한 활성화 유형을 처리하는 수단입니다. 그러나 가장 일반적인 활성화 유형 처리를 위해 다른 메서드를 사용하고 OnActivated은(는) 덜 일반적인 활성화 유형을 위한 대체 수단으로 사용하는 것이 보통입니다. 예를 들어 Application은(는) ActivationKind이(가) Launch일 때마다 콜백으로 호출되는 OnLaunched 메서드를 가지고 있고 이것이 대부분의 앱의 일반적인 활성화입니다. 특정 활성화를 위한 OnCachedFileUpdaterActivated, OnFileActivated, OnFileOpenPickerActivated, OnFileSavePickerActivated, OnSearchActivated, OnShareTargetActivated의 6가지 추가 On* 메서드가 있습니다. XAML 앱에 대한 시작 템플릿에는 Suspending을(를) 위한 OnLaunched 및 처리기가 있으며 둘 다 각 템플릿에 미리 정의되어 있는 SuspensionManager 클래스의 메서드를 통합합니다. SuspensionManager의 기능에 대한 설명은 이 항목의 범위가 아닙니다. 앱을 위한 C#, VB 및 C++ 프로젝트 템플릿에서 자세한 내용을 참조하세요.

앱 일시 중단

사용자가 잠깐 조작을 멈추거나 장치가 전원 부족 상태가 되면 앱이 일시 중단될 수 있습니다. 대부분의 앱은 사용자가 조작을 멈추면 중지됩니다.

사용자가 앱을 백그라운드로 이동하면 Windows는 사용자가 바로 앱으로 다시 전환하는지 알아보기 위해 몇 초간 기다립니다. 사용자가 이 시간 내에 다시 전환하지 않으면 Windows는 앱을 일시 중단합니다.

앱이 WinJS checkpoint 이벤트(HTML) 또는 Application.Suspending 이벤트(XAML)에 대한 이벤트 처리기를 등록했다면 앱이 일시 중단되기 바로 전에 이 코드가 호출됩니다. 이벤트 처리기를 사용하여 관련 앱 및 사용자 데이터를 저장할 수 있습니다. 이러한 목적으로는 응용 프로그램 데이터 API를 사용하는 것이 좋습니다. 이 API는 앱이 Suspended 상태가 되기 전에 완료되기 때문입니다. 자세한 내용은 Windows 런타임으로 앱 데이터에 액세스를 참조하세요. 또한 단독 리소스와 파일 핸들을 해제해야만 앱이 이들을 사용하지 않는 동안 다른 앱이 액세스할 수 있습니다.

대개 앱은 일시 중단 이벤트를 받으면 상태를 저장하고 단독 리소스와 파일 핸들을 즉시 해체해야 하며 코드는 완료까지 일반적으로 1초 이상 걸리지 않습니다. 앱이 일시 중단 이벤트에서 5초(Windows의 경우) 이내 및 1초에서 10초 사이(Windows Phone의 경우)에 돌아오지 않으면 Windows는 앱이 응답을 중지했다고 가정하고 앱을 종료합니다.

Windows는 가능한 한 많은 일시 중단된 앱을 메모리에 저장하려고 시도합니다. 이러한 앱을 메모리에 저장하여 사용자가 일시 중단된 앱 간을 빠르고 안정적으로 전환할 수 있도록 합니다. 그러나 리소스가 부족하여 앱을 메모리에 저장할 수 없는 경우 Windows에서 앱을 종료할 수 있습니다. 개별 앱은 종료된다는 알림을 받지 않으므로 앱의 데이터를 저장할 수 있는 기회는 일시 중단된 동안뿐입니다. 앱이 종료된 후 활성화되었다고 결정하면 앱은 일시 중단된 동안 저장한 응용 프로그램 데이터를 로드하여 앱이 일시 중단되기 전과 같이 동작하도록 해야 합니다.

앱이 백그라운드 작업을 완료하기 위해 계속 실행되어야 하는 앱 시나리오도 있습니다. 예를 들어 앱이 백그라운드에서 오디오를 계속 재생할 수 있습니다. 자세한 내용은 “백그라운드에서 오디오 재생”( HTML 또는 XAML)을 참조하세요. 또한 앱이 일시 중단되거나 종료된 경우에도 백그라운드 전송 작업은 계속됩니다. 자세한 내용은 “파일 다운로드”(HTML 또는 XAML)를 참조하세요.

지침은 앱 일시 중단 및 다시 시작에 대한 지침을 참조하세요.

예제 코드는 "앱 일시 중단 방법"(HTML 또는 XAML)을 참조하세요.

앱 가시성

사용자가 앱에서 다른 앱으로 전환하면 앱은 더 이상 표시되지 않지만 Windows가 앱을 일시 중단할 수 있을 때까지 Running 상태로 유지됩니다. 사용자가 다른 앱으로 전환했지만 앱이 일시 중단되기 전에 다시 앱을 활성화하거나 앱으로 전환하는 경우 앱이 Running 상태로 유지됩니다.

앱이 계속 실행 중이므로 앱 가시성이 변경될 때 앱은 활성화 이벤트를 받지 않습니다. Windows는 필요에 따라 단순히 앱 간을 전환합니다. 사용자가 전환할 때 앱에서 특정 작업을 수행해야 하는 경우 visibilitychange 이벤트(HTML) 또는 Window.VisibilityChanged 이벤트(XAML)를 처리할 수 있습니다.

가시성 이벤트는 중단/다시 시작 또는 활성화 이벤트와 직렬화되지 않습니다. 이러한 이벤트가 특정 순서로 수신된다고 가정하지 마세요.

앱 다시 시작

일시 중단된 앱은 사용자가 앱으로 다시 전환하거나 장치의 전원 부족 상태가 해소되면 다시 시작됩니다.

앱이 다시 시작될 때 앱의 상태에 대한 열거형은 ApplicationExecutionState을(를) 참조하세요. 앱이 Suspended 상태에서 다시 시작되면 앱은 Running 상태가 되고 일시 중단되었을 때의 지점에서 계속됩니다. 앱 데이터가 메모리에 저장되는 한 데이터 손실이 없습니다. 따라서 대부분의 앱은 다시 시작될 때 아무것도 수행할 필요가 없습니다. 그러나 앱이 수 시간 또는 며칠 동안 일시 중단되었을 수도 있으므로 앱의 콘텐츠나 네트워크 연결이 최신 상태가 아닌 경우 다시 시작할 때 새로 고쳐야 합니다. 앱이 WebUIApplication.resuming 이벤트(HTML) 또는 Application.Resuming 이벤트(XMAL)에 대한 이벤트 처리기를 등록했다면 앱이 Suspended 상태에서 다시 시작될 경우 이 이벤트 처리기가 호출됩니다. 이 이벤트 처리기를 사용하여 앱 콘텐츠와 데이터를 새로 고칠 수 있습니다.

참고  

activated이(가) 같은 상황에서 발생하기 때문에 HTML 앱은 일반적으로 resuming을(를) 처리할 필요가 없습니다. activated 이벤트 데이터에서 ActivationKind 정보를 사용하여 앱이 다시 시작되는지 확인할 수 있습니다. 이 패턴은 프로젝트 템플릿 시작을 위한 default.js 파일에 나와 있습니다.

일시 중단된 앱이 앱 계약 또는 확장에 참여하기 위해 활성화되는 경우 Resuming 이벤트를 먼저 받은 다음 Activated 이벤트를 받습니다.

앱이 일시 중단되면 받도록 등록한 네트워크 이벤트를 받지 않습니다. 이러한 이벤트는 대기하지 않으며, 그대로 누락됩니다. 따라서 앱이 다시 시작될 때 네트워크 상태를 테스트해야 합니다.

지침은 앱 일시 중단 및 다시 시작에 대한 지침을 참조하세요.

예제 코드는 "앱 다시 시작 방법"(HTML 또는 XAML)을 참조하세요.

참고  Windows Phone 스토어 앱에서는 XAML 앱의 경우 앱이 현재 메모리에서 일시 중단된 경우에도 사용자가 시작 타일이나 앱 목록에서 앱을 시작할 때마다 OnLaunched이(가) 호출됩니다. Windows에서는 시작 타일이나 앱 목록에서 일시 중단된 앱을 시작해도 이 메서드가 호출되지 않습니다.

앱 종료

일반적으로 사용자는 앱을 닫을 필요가 없으며 Windows에서 관리합니다. 그러나 사용자는 닫기 제스처를 사용하거나 Windows에서 Alt+F4를 누르거나 Windows Phone에서 작업 전환기를 사용하여 앱을 닫도록 선택할 수 있습니다. 사용자가 앱을 닫을 수 있는 UI를 앱에 포함할 수 없으며, 그럴 경우 스토어 인증 프로세스를 통과하지 못합니다.

사용자가 앱을 닫았음을 나타내는 특별 이벤트는 없습니다.

사용자가 앱을 닫으면 앱이 일시 중단 및 종료되어 NotRunning 상태가 됩니다.

Windows 8.1 이상에서는 사용자가 앱을 닫으면 앱이 확실히 종료되지 않고 화면과 전환 목록에서만 제거됩니다.

참고  앱이 Windows 8의 사용자가 닫기 동작에 종속된 경우 Windows 8.1로 업그레이드할 때 앱에서 이 동작을 사용하도록 설정할 수 있습니다. Windows 8의 사용자가 닫기 동작을 사용하도록 설정하려면 ApplicationView.TerminateAppOnFinalViewClose 속성을 사용하여 마지막 창이 닫힐 때 Windows 8.1 앱이 종료되도록 설정하세요.

앱이 Suspending 이벤트에 대한 이벤트 처리기를 등록했다면 앱이 일시 중단될 때 이 이벤트 처리기가 호출됩니다. 이 이벤트 처리기를 사용하여 관련 응용 프로그램 및 사용자 데이터를 영구적 저장소에 저장할 수 있습니다.

사용자가 닫기 동작:  사용자가 앱을 닫은 후 앱이 활성화될 때 어떻게 동작하는지를 결정하는 것이 좋습니다. 앱을 Windows에서 종료했든 사용자가 종료했든 아무런 차이가 없을 수 있습니다. 앱을 사용자가 닫을 때 Windows에서 닫을 때와 다른 작업을 수행해야 하는 경우 활성화 이벤트 처리기를 사용하여 앱을 종료한 주체가 사용자인지 Windows인지를 확인할 수 있습니다. ApplicationExecutionState 열거형에 대한 문서에서 ClosedByUserTerminated 상태에 대한 설명을 참조하세요. Windows 8 앱을 유지 관리하는 경우 ClosedByUser에 대한 처리는 Windows 8.1 앱의 경우와 잠재적으로 다릅니다.

반드시 필요한 경우가 아니면 앱이 자동으로 닫히지 않도록 하는 것이 좋습니다. 예를 들어 앱이 메모리 누수를 발견한 경우 사용자의 개인 데이터 보안을 위해 스스로 닫을 수 있습니다. 앱을 프로그래밍 방식으로 닫는 경우 시스템은 이를 앱 크래시로 처리합니다.

앱 크래시

앱은 시스템 크래시 환경에 따라 시작 화면으로 돌아가야 합니다. 시스템 크래시 환경은 사용자가 수행하던 작업으로 최대한 빠르게 돌아갈 수 있도록 디자인되었으므로 지연을 초래하는 경고 대화 상자나 다른 알림을 제공하지 않아야 합니다. 앱이 사라지는 것으로 무언가 잘못되었음을 사용자가 분명히 알도록 해야 합니다.

앱이 중지되거나, 응답하지 않거나, 예외를 생성하는 경우 Windows는 Microsoft에 문제 보고서를 전송하는 데 동의하는지 묻습니다. Microsoft는 문제 보고서의 오류 데이터 중 일부를 앱을 개선하는 데 사용할 수 있도록 귀하에게 제공합니다. 이 데이터는 대시보드의 앱 품질 페이지에서 볼 수 있습니다.

앱이 중지된 후 사용자가 앱을 활성화하면 앱의 활성화 이벤트 처리기는 NotRunningApplicationExecutionState 값을 수신하고 앱의 초기 UI 및 데이터를 표시해야 합니다. 충돌 후에는 데이터가 손상되었을 수 있으므로 Suspended에서 Resuming에 대해 평소처럼 앱 데이터를 사용하지 마세요. 앱 일시 중단 및 다시 시작에 대한 지침을 참조하세요.

앱 제거

사용자가 앱을 삭제하면 모든 로컬 데이터와 함께 앱이 제거됩니다. 앱을 제거하더라도 문서 또는 사진 라이브러리에 있는 파일 등 공통 위치에 저장되었던 사용자의 데이터에는 영향을 주지 않습니다.

앱 수명 주기 및 Visual Studio 프로젝트 템플릿

HTML 또는 XAML 앱 모두를 위해 앱 수명 주기에 적합한 기본 코드가 Visual Studio 프로젝트 템플릿 시작하기에서 제공됩니다. 기본 앱은 시작 활성화를 처리하고 사용자가 직접 코드를 추가하기도 전에 기본 UI를 표시합니다. 자세한 내용은 스토어 앱을 위한 JavaScript 프로젝트 템플릿 또는 앱용 C#, VB 및 C++ 프로젝트 템플릿을 참조하세요.

응용 프로그램 수명 주기 키 API

관련 항목

앱 일시 중단 및 다시 시작에 대한 지침
엡 활성화됨, 다시 시작 및 중단 샘플(JavaScript)

 

 

표시:
© 2015 Microsoft