내보내기(0) 인쇄
모두 확장

Windows Phone의 실행 모델 개요

2012-02-09

Windows Phone 실행 모델은 응용프로그램을 시작할 때부터 종료할 때까지 Windows Phone 에서 실행 중인 응용프로그램의 수명 주기를 제어합니다.

실행 모델은 항상 빠르고 응답성이 뛰어난 환경을 최종 사용자에게 제공하도록 설계되었습니다. 이 목적을 위해 Windows Phone 에서는 한 번에 하나의 응용프로그램만 포그라운드에서 실행할 수 있습니다. 응용프로그램이 더 이상 포그라운드에 있지 않은 경우 운영 체제가 응용프로그램을 유휴 상태로 전환합니다. 포그라운드 응용프로그램에 사용할 수 있는 단말기 메모리가 부족하여 적절한 사용자 환경을 제공할 수 없는 경우 운영 체제가 가장 오래 전에 사용한 응용프로그램부터 종료하여 유휴 응용프로그램을 종료하기 시작합니다. 응용프로그램이 비활성화된 후 다시 활성화될 때 상태를 관리할 수 있도록 프로그래밍 프레임워크가 제공됩니다. 이 프레임워크는 응용프로그램이 종료된 후 다시 활성화된 경우에도 단일 인스턴스를 유지하기 위해 응용프로그램이 사용자에게 표시되는 사용자 환경을 만드는 데 유용합니다.

또한 실행 모델은 응용프로그램 간에 일관성 있는 탐색 환경을 사용자에게 제공합니다. Windows Phone 에서는 사용자가 응용프로그램과 연결된 토스트 알림을 탭하는 등의 다른 방법 외에 시작의 타일이나 설치된 응용프로그램 목록에서 응용프로그램을 시작하여 전방 탐색합니다. 사용자가 하드웨어 뒤로 버튼을 사용하여 이전에 실행 중인 응용프로그램 스택을 통해 또는 실행 중인 응용프로그램 페이지를 통해 후방 탐색할 수도 있습니다. Windows Phone 7.5 에서는 하드웨어 뒤로 버튼을 길게 눌러 이전에 실행 중인 응용프로그램으로 전환하는 기능이 추가되었습니다.

이 항목에서는 Windows Phone 응용프로그램의 수명 주기에 대해 자세히 설명하며 응답성이 뛰어나고 일관성 있는 탐색 환경을 제공하는 응용프로그램을 개발하는 데 필요한 단계를 간단하게 설명합니다. 이 개요를 읽은 후 다음 항목에서 샘플 코드를 비롯한 단계별 지침을 확인할 수 있습니다.

운영 체제는 모든 응용프로그램의 실행을 동일한 방식으로 관리하지만 XNA 게임에서 응용프로그램 중단을 처리하려면 특별한 고려가 필요합니다. XNA 기반 응용프로그램을 만드는 경우 이 단원과 Tombstoning for Windows Phone 7 Games 문서를 읽어야 합니다.

이 개요의 나머지 부분을 읽기 전에 다음 용어와 개념을 확인해야 합니다.

응용프로그램 상태

응용프로그램의 여러 페이지에서 사용되는 데이터입니다. 예를 들어 웹 서비스에서 가져온 구조적 데이터가 있습니다. 각 페이지에서 이 데이터의 다른 뷰를 제공할 수도 있지만 데이터가 응용프로그램 전체에 속해 있다고 간주할 수 있습니다. 응용프로그램이 종료되는 경우에만 모든 응용프로그램 상태 데이터가 저장된다는 잘못된 통념이 있지만, 흔히 사용자가 어떤 페이지에서 벗어날 때 이러한 유형의 데이터를 저장하는 것이 좋습니다. 그러면 응용프로그램이 종료되는 동안 완료해야 할 상태 관리 작업량이 줄어듭니다.

페이지 상태

단일 응용프로그램 페이지의 현재 시각적 상태입니다. 사용자가 데이터를 입력할 컨트롤이 포함된 페이지가 있는 경우 사용자는 응용프로그램을 벗어난 부분을 탐색한 후 돌아올 때 양식의 모든 컨트롤에 나갈 때와 동일한 값이 포함되어 있기를 기대합니다. 페이지 상태를 관리하는 응용프로그램은 때때로 사용자 환경이 영구 응용프로그램이 되도록 로드 시 페이지의 컨트롤 값을 설정합니다. 사용자가 응용프로그램의 새 인스턴스를 시작할 때 페이지 UI 상태에서 새 인스턴스임을 인식하고 응용프로그램의 이전 인스턴스로부터 UI 상태를 로드하지 않아야 합니다.

응용프로그램 이벤트

응용프로그램 상태 관리에 사용되는 네 가지 주요 이벤트(Launching, Deactivated, ActivatedClosing)가 있습니다. 이러한 이벤트 처리기는 Windows Phone 응용프로그램의 Visual Studio 프로젝트 템플릿에 속한 Application 개체에 포함되어 있습니다. 이 이벤트 처리기에서 코드를 작성하여 응용프로그램 상태를 관리합니다.

중요중요:
모든 응용프로그램 이벤트는 응용프로그램에서 이벤트 처리기의 작업을 완료하는 시간이 10초로 제한됩니다. 어떤 응용프로그램에서 이 한도를 초과할 경우 즉시 종료됩니다. 이런 이유로 응용프로그램 이벤트의 처리기 내에서 격리된 저장소를 읽거나 쓰는 것과 같이 리소스를 많이 사용하는 작업을 수행하지 말아야 합니다. 이러한 작업은 가급적 응용프로그램이 실행되는 동안 백그라운드 스레드에서 수행해야 합니다. 응용프로그램의 수명 내내 변경되는 응용프로그램 데이터를 저장하면 응용프로그램 이벤트 과정에서 수행해야 하는 상태 관리의 작업량이 줄어듭니다.

페이지 이벤트

모든 Windows Phone 페이지가 상속하는 PhoneApplicationPage 개체는 응용프로그램에서 페이지 상태를 관리하기 위해 재정의할 두 메서드(OnNavigatedTo(NavigationEventArgs)OnNavigatedFrom(NavigationEventArgs))를 노출합니다.

삭제 표식

응용프로그램이 종료되었지만 응용프로그램 상태에 대한 일부 데이터와 응용프로그램 내의 개별 페이지가 유지되는 프로세스입니다. 저장되는 데이터는 현재 표시된 응용프로그램 페이지, 이전에 응용프로그램에서 열어 본 페이지의 후방 스택 등입니다. 사용자가 삭제 표식이 지정된 응용프로그램으로 돌아가면 응용프로그램이 다시 생성되며 현재 페이지와 페이지 기록이 자동으로 복원됩니다.

상태 사전

각 Windows Phone 응용프로그램 및 응용프로그램 페이지는 키/값 쌍을 저장할 수 있는 Dictionary 개체를 제공합니다. 응용프로그램에 삭제 표식을 지정할 때 이 사전은 유지됩니다. 삭제 표식 지정 후 응용프로그램을 활성화하면 이 사전을 사용하여 응용프로그램 상태가 복원됩니다. 이 사전의 모든 데이터가 직렬화될 수 있어야 합니다.

다음 이미지는 Windows Phone 응용프로그램의 수명 주기를 보여 줍니다. 이 다이어그램에서 원은 응용프로그램 상태입니다. 사각형은 응용프로그램이 상태를 관리해야 하는 응용프로그램 또는 페이지 수준 이벤트를 보여 줍니다.

Windows Phone 7.5의 실행 모델 다이어그램

이 단원에서는 Windows Phone 응용프로그램에 대한 응용프로그램 수명 주기의 모든 요소에 대해 설명하고 응용프로그램이 각 단계에서 수행해야 하는 작업을 강조합니다. 이 단원에서는 운영 체제 및 사용자가 다양한 응용프로그램 상태 변경을 트리거하기 위해 수행하는 작업에 대한 배경 지식을 제공합니다. 이벤트 및 응용프로그램에서 수행해야 하는 작업의 간단한 검사 목록은 실행 모델 이벤트 및 응용프로그램 작업 요약을 참조하십시오.

시작 이벤트

사용자가 응용프로그램과 연결된 토스트 알림을 탭하거나 사진 추가 기능 메뉴에서 응용프로그램을 선택하는 등의 다른 방법 외에 시작의 타일이나 설치된 응용프로그램 목록에서 새 응용프로그램 인스턴스를 시작하면 Launching 이벤트가 발생합니다. 이런 방식으로 응용프로그램을 시작하면 이전 인스턴스의 계속이 아니라 새 인스턴스로 사용자에게 표시됩니다. 응용프로그램이 신속하게 로드되게 하려면 이 이벤트 처리기에서 코드를 가능한 한 적게 실행해야 합니다. 특히 파일 및 네트워크 작업과 같이 리소스를 많이 사용하는 작업은 피해야 합니다. 최상의 사용자 환경을 위해 이러한 작업은 응용프로그램이 로드된 후 백그라운드 스레드에서 수행해야 합니다.

Running

응용프로그램이 시작된 후 실행되고 있습니다. 사용자가 응용프로그램을 벗어난 부분을 전방 탐색하거나 응용프로그램의 첫 페이지 이전까지 후방 탐색하기 전에는 계속 실행됩니다. Windows Phone 응용프로그램은 사용자가 종료하거나 끝내는 메커니즘을 제공하지 않아야 합니다. 응용프로그램 유휴 검색을 비활성화하지 않으면 휴대폰 잠금 화면이 사용되는 경우에도 응용프로그램이 실행 상태로 유지됩니다. 자세한 내용은 Windows Phone의 유휴 검색을 참조하십시오.

OnNavigatedFrom 메서드

OnNavigatedFrom(NavigationEventArgs) 메서드는 사용자가 응용프로그램 페이지를 벗어난 부분을 탐색할 때마다 호출됩니다. 이 호출은 응용프로그램 내의 정상적인 페이지 탐색 결과로 발생할 수 있습니다. 이 메서드는 응용프로그램이 비활성화될 때도 호출되는데, 이 내용은 다음 단원에서 설명합니다. 이 메서드가 호출될 때마다 응용프로그램이 페이지 상태를 저장하여 사용자가 페이지로 돌아올 경우 페이지를 복원할 수 있게 해야 합니다. 단, 후방 탐색은 예외입니다. NavigationMode 속성을 사용하여 탐색이 후방 탐색인지 확인할 수 있습니다. 후방 탐색인 경우 다음에 페이지를 방문할 때 페이지가 다시 생성되므로 상태를 저장할 필요가 없습니다.

경우에 따라 OnNavigatingFrom(NavigatingCancelEventArgs) 메서드에 상태를 저장해야 하는 경우가 있습니다. 특히 MediaElement 컨트롤의 상태를 저장하려면 이 작업을 수행해야 합니다.

Deactivated 이벤트

사용자가 시작 버튼을 누르거나 다른 응용프로그램을 시작하여 응용프로그램을 벗어난 부분을 전방 탐색하면 Deactivated 이벤트가 발생합니다. 응용프로그램이 선택기를 시작하는 경우에도 Deactivated 이벤트가 발생합니다. 선택기에 대한 자세한 내용은 Windows Phone의 실행기 및 선택기 개요를 참조하십시오. 응용프로그램 유휴 검색을 비활성화하지 않으면 단말기 잠금 화면이 사용되는 경우에도 이 이벤트가 발생합니다.

Deactivated 이벤트 처리기에서 응용프로그램이 응용프로그램 상태를 저장하여 나중에 복원할 수 있게 해야 합니다. Windows Phone 응용프로그램에는 응용프로그램 상태를 저장하는 데 사용할 수 있는 사전인 State 개체가 제공됩니다. 응용프로그램에 삭제 표식을 지정한 후 다시 활성화하면 이 상태 사전에 Deactivated에서 저장한 데이터가 채워집니다. 이 데이터는 메모리에 있으므로 리소스를 많이 사용하는 파일 작업 없이 데이터를 사용하여 상태를 복원할 수 있습니다.

Deactivated가 호출된 후 응용프로그램이 완전히 종료될 수도 있습니다. 응용프로그램이 종료된 경우에는 상태 사전이 유지되지 않습니다. 이 때문에 응용프로그램 인스턴스에서 유지되어야 하는 저장되지 않은 상태는 Deactivated 이벤트 도중 격리된 저장소에도 저장해야 합니다.

유휴

사용자가 응용프로그램을 벗어난 부분을 전방 탐색하면 Deactivated 이벤트가 발생한 후 운영 체제가 응용프로그램을 유휴 상태로 전환합니다. 이 상태에서는 모든 응용프로그램 스레드가 중지되고 처리가 수행되지 않지만 응용프로그램이 메모리에 그대로 유지됩니다. 이 상태에서 응용프로그램을 다시 활성화하는 경우 상태가 유지되었기 때문에 응용프로그램에서 상태를 다시 만들 필요가 없습니다.

응용프로그램이 유휴 상태로 전환된 후 새 응용프로그램을 시작했으며 이러한 응용프로그램에서 적절한 사용자 환경을 제공하는 데 필요한 메모리가 부족한 경우 운영 체제가 유휴 응용프로그램에 삭제 표식을 지정하여 메모리를 확보하기 시작합니다.

삭제 표식 지정

삭제 표식이 지정된 응용프로그램은 종료되었지만 Deactivated 도중 응용프로그램에서 채워진 상태 사전 및 탐색 상태 정보가 유지됩니다. 단말기는 한 번에 최대 5개 응용프로그램의 삭제 표식 정보를 유지 관리합니다. 응용프로그램에 삭제 표식이 지정되었으며 사용자가 응용프로그램으로 돌아가면 응용프로그램이 다시 시작되며 유지된 데이터를 사용하여 상태를 복원할 수 있습니다. 그렇지 않으면 응용프로그램이 종료된 것입니다.

Activated 이벤트

사용자가 유휴 상태나 삭제 표식이 지정된 응용프로그램으로 돌아가면 Activated 이벤트가 호출됩니다. 응용프로그램은 이벤트 인수의 IsApplicationInstancePreserved 속성을 검사하여 응용프로그램이 유휴 또는 삭제 표식 지정 상태에서 돌아오고 있는지를 확인해야 합니다. IsApplicationInstancePreserved가 true이면 응용프로그램이 유휴 상태이며 운영 체제에서 상태를 자동으로 유지한 것입니다. false이면 응용프로그램에 삭제 표식이 지정된 것이며 응용프로그램이 상태 사전을 사용하여 응용프로그램 상태를 복원해야 합니다. 격리된 저장소나 네트워크 리소스에서 로드하는 작업과 같이 리소스를 많이 사용하는 작업은 응용프로그램을 계속하는 데 걸리는 시간을 증가시키기 때문에 Activated 이벤트 처리기 도중 수행하면 안 됩니다. 대신 응용프로그램이 로드된 후 백그라운드 스레드에서 이러한 작업을 수행해야 합니다.

OnNavigatedTo 메서드

사용자가 페이지를 탐색하면 OnNavigatedTo(NavigationEventArgs) 메서드가 호출됩니다. 응용프로그램을 처음 시작하는 경우, 사용자가 응용프로그램 페이지 간에 탐색하는 경우, 유휴 또는 삭제 표식 지정 상태로 전환된 후 응용프로그램을 다시 시작하는 경우 등이 여기에 포함됩니다. 이 메서드에서 응용프로그램은 페이지가 새 인스턴스인지 여부를 확인해야 합니다. 새 인스턴스가 아닌 경우 상태를 복원할 필요가 없습니다. 페이지가 새 인스턴스이고 페이지의 상태 사전에 데이터가 있는 경우 데이터를 사용하여 페이지 UI 상태를 복원해야 합니다.

Closing 이벤트

사용자가 응용프로그램의 첫 페이지 이전까지 후방 탐색하면 Closing 이벤트가 발생합니다. 이 경우 응용프로그램이 종료되고 상태가 저장되지 않습니다. Closing 이벤트 처리기에서 응용프로그램이 인스턴스 간에 유지되어야 하는 데이터를 저장할 수 있습니다. 응용프로그램은 10초 제한 이내에 응용프로그램 및 페이지 탐색 이벤트를 모두 완료해야 합니다. 이 제한을 초과하면 응용프로그램이 종료됩니다. 이 때문에 응용프로그램 수명 동안 영구 상태를 저장하여 Closing 이벤트 처리기에서 수행해야 하는 파일 I/O를 줄이는 것이 좋습니다.

다음 표에서는 응용프로그램 수명 주기 동안 발생하는 이벤트와 각 이벤트에 대해 응용프로그램에서 수행해야 하는 작업을 요약해서 보여 줍니다.

이벤트 또는 메서드

응용프로그램 작업

시작 이벤트

코드를 거의 실행하지 않습니다. 격리된 저장소 액세스와 같이 리소스를 많이 사용하는 작업을 수행하지 않습니다.

OnNavigatedFrom 메서드

후방 탐색이 아닌 경우 UI 상태를 State 사전에 저장합니다.

Deactivated 이벤트

응용프로그램에 삭제 표식이 지정된 경우 응용프로그램 상태를 State에 저장합니다. 또한 응용프로그램이 종료된 경우 영구 상태를 격리된 저장소에 저장합니다. 응용프로그램이 유휴 상태인 경우 메모리의 응용프로그램 상태를 삭제하지 않습니다.

Activated 이벤트

IsApplicationInstancePreserved를 확인합니다. true이면 아무 작업도 하지 않습니다. false이면 State의 데이터를 사용하여 응용프로그램 상태를 복원합니다.

OnNavigatedTo 메서드

페이지가 새 인스턴스인지 여부를 확인합니다. 새 인스턴스가 아니면 상태가 자동으로 유지됩니다. 그렇지 않으면 State에 데이터가 있는 경우 이 데이터를 사용하여 UI를 복원합니다.

Closing 이벤트

영구 응용프로그램 데이터를 격리된 저장소에 저장합니다.

주의주의:

이 단원에서 설명하는 이벤트는 응용프로그램이 포그라운드에 들어오고 떠날 때 상태를 저장하고 복원할 수 있는 기회를 제공합니다. 그러나 데이터가 변경될 때 상태 데이터를 저장하는 것이 좋습니다. 예를 들어, 어떤 웹 요청의 결과는 네트워크에서 도착할 때 디스크 및/또는 응용프로그램 상태 사전에 저장할 수 있습니다. 이 데이터를 저장하기 위해 Deactivated 이벤트가 발생할 때까지 기다리지 않아야 합니다. 모든 응용프로그램 수명 주기 이벤트는 응용프로그램에서 임의의 작업을 완료하는 시간이 10초로 제한됩니다.

표시:
© 2014 Microsoft