Windows Phone의 앱 활성화 및 비활성화

2013-12-05

적용 대상: Windows Phone 8 | Windows Phone OS 7.1

 

이 항목에서는 Windows Phone 앱의 수명 주기와 앱에서 활성화 및 비활성화 작업을 처리하는 방법에 대해 설명합니다. Windows Phone 에서는 지정된 시간에 하나의 앱만 포그라운드에서 실행됩니다. 사용 중인 앱이 효율적으로 응답하는 원활한 환경을 제공하는 데 필요한 리소스를 사용할 수 있도록 하기 위해 이러한 방식이 적용됩니다. 이처럼 포그라운드에서 한 번에 하나의 앱만 실행되므로, 사용자가 앱 외부로 이동하면 앱은 사용자가 외부로 이동한 방식과 컨텍스트에 따라 일시 중단되거나 종료됩니다. Windows Phone 응용프로그램 모델에서는 앱이 일관되고 직관적인 사용자 환경을 제공하는 방식으로 활성화 및 비활성화 작업을 처리할 수 있는 이벤트 및 관련 API 집합을 제공합니다.

참고참고:

위치 인식 앱은 위치를 추적하는 동안 백그라운드에서 실행될 수 있습니다. 자세한 내용은 Windows Phone 8의 백그라운드에서 위치 추적 앱을 실행하는 방법을 참조하세요.

이 항목에는 다음 단원이 포함되어 있습니다.

 

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

Execution Model Diagram for Windows Phone 7.5

이 섹션에서는 Windows Phone 앱의 응용프로그램 수명 주기에 대해 설명하고, 앱이 각 단계에서 수행해야 하는 작업을 부연 설명합니다. 또한 PhoneApplicationPagePhoneApplicationService 개체의 이벤트와 속성에 대해 살펴봅니다. 이러한 개체는 Windows Phone 관리되는 응용프로그램 프로젝트 템플릿의 일부로 제공되며, Windows Phone SDK 에 포함되어 있습니다. 이러한 API를 사용하는 코드 예제를 보려면 Windows Phone의 페이지 상태를 유지 및 복원하는 방법Windows Phone의 앱 상태를 유지 및 복원하는 방법을 참조하세요. 응용프로그램에서 수행해야 하는 작업과 이벤트의 간단한 검사 목록은 실행 모델 이벤트 및 응용프로그램 작업 요약을 참조하세요.

Launching 이벤트

사용자는 설치된 응용프로그램 목록 또는 시작 타일에서 앱을 선택하여 새 앱 인스턴스를 실행할 수 있습니다. 또한 앱에 연결된 알림을 탭하거나 사진 및 기타 항목 메뉴에서 앱을 선택하는 등의 다른 방법을 사용할 수도 있습니다. 이러한 방식으로 실행한 앱은 사용자가 새 앱 인스턴스가 실행되었음을 확인할 수 있는 사용자 인터페이스를 제공해야 합니다. 여기에는 사용자가 최근에 본 문서 목록과 같이 사용자의 이전 앱 사용 환경에 대한 컨텍스트가 제공될 수도 있지만, 이 경우 사용자가 이전에 실행 중이었던 앱 인스턴스로 돌아오는 것처럼 표시되어서는 안 됩니다.

새 앱 인스턴스를 실행하면 Launching 이벤트가 발생합니다. 앱이 빠르게 로드되도록 하려면 이 이벤트의 처리기에서 최소한의 코드만 실행해야 합니다. 특히 파일 및 네트워크 작업처럼 리소스를 많이 사용하는 작업을 수행해서는 안 됩니다. 최적의 사용자 환경을 제공하려면 이러한 작업은 앱이 로드된 후 백그라운드 스레드에서 수행해야 합니다.

실행 중

실행된 앱은 실행 중 상태가 됩니다. 앱은 사용자가 전방 탐색을 하거나, 앱 외부로 이동하거나, 앱의 첫 페이지로 돌아갈 때까지 계속 실행됩니다. Windows Phone 앱은 사용자가 앱을 끝내거나 종료하는 메커니즘을 제공하지 않습니다. 또한 휴대폰 잠금 화면이 적용될 때(응용프로그램 유휴 검색을 사용하지 않도록 설정한 경우는 제외)도 앱은 실행 중 상태로 유지됩니다. 자세한 내용은 Windows Phone의 유휴 검색을 참조하세요.

OnNavigatedFrom 메서드

사용자가 앱의 페이지 중 하나에서 다른 위치로 이동할 때마다 OnNavigatedFrom(NavigationEventArgs) 메서드가 호출됩니다. 이 메서드는 응용프로그램 내의 일반적인 페이지 탐색 결과로도 호출될 수 있지만, 사용자가 앱 외부로 이동해도 호출됩니다. 이 메서드가 호출될 때마다 응용프로그램은 페이지 상태를 저장하여 사용자가 페이지로 돌아오는 경우 페이지를 복원하고, 페이지가 더 이상 메모리에 남아 있지 않도록 해야 합니다. 단, 후방 탐색은 예외입니다. NavigationMode 속성을 사용해 탐색이 후방 탐색인지를 확인할 수 있습니다. 후방 탐색의 경우 다음번에 페이지를 방문할 때 다시 만들기 때문에 상태를 저장할 필요가 없습니다.

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

Deactivated 이벤트

Deactivated 이벤트는 사용자가 시작 버튼을 누르거나, 다른 응용프로그램을 실행하여 전방 탐색을 하거나, 앱 외부로 이동하면 발생합니다. 또한 응용프로그램에서 선택자를 실행하는 경우에도 Deactivated 이벤트가 발생합니다. 선택자에 대한 자세한 내용은 Windows Phone의 시작 관리자 및 선택자를 참조하세요. 장치 잠금 화면이 적용되는 경우에도 이 이벤트가 발생합니다(응용프로그램 유휴 검색을 사용하지 않도록 설정한 경우는 제외).

응용프로그램은 필요한 경우 나중에 복원할 수 있도록 Deactivated 이벤트 처리기에서 저장되지 않은 응용프로그램 데이터를 저장해야 합니다. Windows Phone 응용프로그램에서는 응용프로그램 상태를 저장하는 데 사용할 수 있는 State 개체가 제공됩니다. 운영 체제는 앱을 삭제 표시하는 경우(아래에서 설명), 이 사전을 저장하고 앱이 다시 활성화되면 사전을 다시 제공합니다.

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

유휴

Deactivated 이벤트가 발생한 후 사용자가 전방 탐색을 하거나 앱 외부로 이동하면 운영 체제에서는 앱을 유휴 상태로 설정합니다. 이 상태에서는 응용프로그램의 모든 스레드가 중지되며 처리가 수행되지 않지만, 응용프로그램은 메모리 내에서 그대로 유지됩니다. 이처럼 상태가 유지되기 때문에 앱은 유휴 상태에서 다시 활성화될 때 상태를 다시 설정하기 위해 아무런 작업도 할 필요가 없습니다.

앱이 유휴 상태가 된 후 새 앱을 실행하는 경우 효율적인 사용자 환경을 제공하기 위해 사용 가능한 것보다 많은 메모리가 이러한 응용프로그램에 필요하면, 운영 체제는 유휴 응용프로그램을 삭제 표시하기 시작해 메모리를 확보합니다.

삭제 표시됨

삭제 표시된 앱은 종료되었지만, 운영 체제에서 해당 탐색 상태에 대한 정보와 Deactivated 중에 앱이 채운 상태 사전을 유지합니다. 장치에서는 한 번에 최대 5개의 앱에 대한 삭제 표시 정보를 유지 관리합니다. 앱이 삭제 표시된 후 사용자가 응용프로그램으로 다시 이동하면 응용프로그램이 다시 실행되고 유지된 데이터를 사용하여 상태를 복원할 수 있습니다.

Activated 이벤트

Activated 이벤트는 사용자가 유휴 상태 또는 삭제 표시된 앱으로 돌아오면 호출됩니다. 이 경우 앱은 이벤트 인수의 IsApplicationInstancePreserved 속성을 검사하여 앱이 다시 활성화되기 전의 상태(유휴 상태 또는 삭제 표시 상태)를 확인해야 합니다. IsApplicationInstancePreserved가 true이면 앱이 유휴 상태여서 운영 체제에서 상태가 자동 유지된 것입니다. 이 속성이 false이면 앱이 삭제 표시되었던 것이므로 상태 사전을 사용하여 응용프로그램 상태를 복원해야 합니다. 응용프로그램은 Activated 이벤트 처리기를 사용하는 동안 격리된 저장소나 네트워크 리소스에서 로드하는 등의 리소스를 많이 사용하는 작업을 수행해서는 안 됩니다. 이러한 작업을 수행하는 경우 응용프로그램을 계속하는 데 시간이 더 오래 걸립니다. 대신 이러한 작업은 응용프로그램이 로드된 후 백그라운드 스레드에서 수행해야 합니다. Deactivated 상태에서 저장한 상태 사전은 앱이 다시 활성화될 때 메모리 내에 있으므로, 리소스를 많이 사용하는 파일 작업의 오버헤드 없이 해당 사전을 사용하여 상태를 복원할 수 있습니다.

OnNavigatedTo 메서드

사용자가 페이지로 이동하면 OnNavigatedTo(NavigationEventArgs) 메서드가 호출됩니다. 여기에는 앱을 처음으로 실행하는 경우, 사용자가 앱의 페이지 사이를 이동하는 경우, 그리고 앱이 유휴 상태가 되거나 삭제 표시된 후 다시 실행하는 경우가 포함됩니다. 이 메서드에서 앱은 페이지가 새 인스턴스인지를 확인합니다. 새 인스턴스가 아니면 페이지 상태를 복원할 필요가 없습니다. 페이지가 새 인스턴스이고 상태 사전에 해당 페이지에 대한 데이터가 있으면 이 데이터를 사용해 페이지 UI의 상태를 복원해야 합니다.

Closing 이벤트

Closing 이벤트는 사용자가 앱의 첫 페이지를 지나 후방 탐색하는 경우 발생합니다. 이 경우 앱이 종료되고 상태가 저장되지 않습니다. 앱은 Closing 이벤트 처리기에서 인스턴스 전체에 걸쳐 유지해야 하는 데이터를 저장할 수 있습니다. 앱은 10초의 제한 시간 이내에 모든 응용프로그램과 페이지 탐색 이벤트를 완료해야 합니다. 이 제한을 초과하면 응용프로그램이 종료됩니다. 따라서 응용프로그램 수명 전체에서 영구 상태를 저장하고, Closing 이벤트 처리기에서 많은 파일 I/O를 발생시키지 않는 것이 좋습니다.

다음 표에는 응용프로그램의 수명 주기 동안 발생하는 이벤트와, 각 이벤트에 대해 앱이 수행해야 하는 작업이 간략하게 요약되어 있습니다.

이벤트 또는 메서드

응용프로그램 작업

Launching 이벤트

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

OnNavigatedFrom 메서드

후방 탐색을 수행하지 않는 경우 UI 상태를 State 사전에 저장합니다.

Deactivated 이벤트

앱이 삭제 표시된 경우 앱 상태를 State에 저장합니다. 또한 응용프로그램이 유휴 상태인 경우에는 영구 상태를 격리된 저장소에 저장합니다. 앱이 유휴 상태로 설정된 경우 메모리의 앱 상태를 삭제하지 마세요.

Activated 이벤트

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

OnNavigatedTo 메서드

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

Closing 이벤트

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

주의주의:

이 섹션에서 설명하는 이벤트를 통해 응용프로그램이 포그라운드 내부 또는 외부로 이동할 때 상태를 저장하고 복원할 수 있습니다. 그러나 데이터가 변경될 때는 상태 데이터를 저장하는 것이 좋습니다. 예를 들어 웹 요청 결과가 네트워크에 도착하는 즉시 디스크나 응용프로그램 상태 사전 중 하나 또는 두 가지에 모두 저장할 수 있습니다. 즉, Deactivated 이벤트가 발생할 때까지 기다렸다가 이 데이터를 저장해서는 안 됩니다. 모든 응용프로그램 수명 주기 이벤트에서는 응용프로그램이 작업을 완료하는 데 10초의 제한 시간이 적용된다는 점을 유념하세요.

표시:
© 2014 Microsoft