정보
요청한 주제가 아래에 표시됩니다. 그러나 이 주제는 이 라이브러리에 포함되지 않습니다.

Windows Phone 8의 활성화 및 비활성화에 대한 모범 사례

2014-06-18

적용 대상: Windows Phone 8 및 Windows Phone Silverlight 8.1 | Windows Phone OS 7.1

 

Windows Phone 응용프로그램은 사용자가 다른 위치로 이동하면 잠재적으로 종료됩니다. 응용프로그램의 수명 주기에 대한 개요는 Windows Phone 8의 앱 활성화 및 비활성화를 참조하세요.

이 항목은 예외 모델 이벤트를 처리하기 위한 일부 모범 사례에서 중점적으로 설명합니다.

  • 시작 또는 설치된 응용프로그램 목록에서 사용자가 응용프로그램을 실행할 때 일관된 실행 환경이 제공되는지 확인합니다. 사용자가 새 응용프로그램 인스턴스를 실행하고 있음을 분명히 알 수 있어야 합니다.

    사용자가 응용프로그램의 새 인스턴스를 실행할 경우, 응용프로그램에서 이전 인스턴스에 대한 일부 정보(예: 최근에 연 문서 목록)를 사용자에게 제공할 수는 있지만 사용자가 이전 세션을 진행하고 있다는 느낌을 받지 않아야 합니다.

  • 사용자가 이전에 실행하던 응용프로그램으로 되돌아가 이 응용프로그램이 활성화된 경우, 응용프로그램이 비활성화된 상태였을 때 표시되던 환경과 일치하는 환경이 사용자에게 제공됩니다. 사용자는 응용프로그램이 종료되었다가 다시 시작되었는지 명확히 알지 못합니다.

  • 일부 Windows Phone 기능은 실행된 응용프로그램에 컨텍스트 정보를 제공하는 방식으로 사용자가 응용프로그램을 실행하게 되는 메커니즘을 제공합니다. 예를 들어 ShellToast, ReminderShellTile은 모두 쿼리 문자열이 전달될 수 있는 NavigationUri 매개 변수를 노출하고, MediaHistoryItem 클래스는 컨텍스트 정보를 전달할 수 있는 PlayerContext 속성을 포함합니다. 응용프로그램은 이러한 메커니즘 중 하나를 사용하여 실행될 때 컨텍스트에 해당하는 콘텐츠를 표시해야 합니다.

  • PhoneApplicationService 클래스의 State 속성을 사용하여 Deactivated 이벤트 처리기에 임시 응용프로그램 상태를 저장하고, Activated 처리기에서 응용프로그램 상태를 검색합니다.

  • PhoneApplicationPage 클래스의 State 속성을 사용하여 임시 페이지 상태를 OnNavigatedFrom 이벤트 처리기에 저장하고, OnNavigatedTo 이벤트 처리기에서 페이지 상태를 검색합니다.

  • 응용프로그램이 삭제 표시되면 사용자는 응용프로그램으로 돌아가지 못할 수 있습니다. 이러한 이유로 Deactivated 이벤트 처리기 및 Closing 이벤트 처리기에서 모두 격리된 저장소에 영구 상태를 저장해야 합니다. 코드가 중복되지 않도록 하기 위해 영구 데이터를 격리된 저장소에 저장하는 단일 메서드를 만든 다음 두 이벤트 처리기에서 동일한 메서드를 호출할 수 있습니다.

  • 응용프로그램은 ActivatedDeactivated 같은 응용프로그램 이벤트 처리기와 OnNavigatedToOnNavigatedFrom 같은 페이지 탐색 메서드를 모두 10초 내에 완료해야 합니다. 응용프로그램이 이러한 이벤트 중 하나를 완료하는 데 10초 이상 걸리면 응용프로그램이 종료됩니다.

  • 응용프로그램이 격리된 저장소의 데이터를 사용하는 경우 이 데이터를 Launching 이벤트 처리기나 Activated 이벤트 처리기에 로드해서는 안 됩니다. 디스크 작업에 몇 초 정도 소요될 수 있고 이러한 이벤트는 응용프로그램이 로드되어 활성화되기 전에 호출되므로, 해당 처리기의 격리된 저장소에 액세스하면 응용프로그램이 로드되는 동안 시간이 오래 걸립니다. 대신 응용프로그램이 로드된 후 비동기적으로 격리된 저장소에서 데이터를 로드해야 합니다.

    DeactivatedClosing 이벤트 처리기에서 격리된 저장소에 데이터를 써야 할 수 있지만 이러한 이벤트 처리기가 작업을 완료되는 데 허용되는 최대 시간이 10초이므로, 해당 이벤트가 발생하는 동안 저장해야 하는 데이터의 양을 최소화하려면 응용프로그램이 실행되는 동안 점층적으로 데이터를 저장하는 것이 좋습니다.

  • 앱이 포그라운드에 없을 때 운영 체제에 의해 종료되면 Closing 이벤트가 발생하지 않습니다. 앱에서 Deactivated 이벤트를 받는 데 의존할 수 있지만 Closing 이벤트는 아닙니다. 이런 이유로 Deactivated 이벤트 처리기에서 필수 정리 및 상태 유지 관리 작업을 모두 수행해야 합니다.

  • 앱은 앱 종료 시 발생하는 Exit 이벤트에 의존할 수 없습니다. Deactivated 이벤트에서 앱 정리를 처리해야 합니다.

  • 응용프로그램은 유휴 상태로 유지되었다가 삭제 표시되지 않은 상태로 실행 중 상태로 돌아갈 수 있습니다. 응용프로그램이 비활성화되었을 때 메모리 내부 상태를 소멸하지 않아야 합니다.

  • 시작 관리자나 선택자를 호출하면 응용프로그램이 항상 비활성화되므로 삭제 표시될 수 있습니다. 응용프로그램이 다시 활성화될 때 선택자 작업의 결과를 받도록 하려면 PhoneApplicationPage 클래스 내에서 전역 범위를 사용하여 선택자 개체를 선언해야 합니다. 또한 선택자를 초기화하고 PhoneApplicationPage 생성자에 Completed 이벤트 대리자를 할당해야 합니다.

  • PhoneApplicationService 이벤트 처리기는 Windows Phone SDK 에 포함된 기본 Windows Phone 응용프로그램 프로젝트 템플릿에서 스텁 해제됩니다. 이 처리기는 App.xaml.cs 파일에서 찾을 수 있습니다.

  • PhoneApplicationService 클래스의 인스턴스는 기본 Windows Phone 응용프로그램 프로젝트 템플릿에서 제공됩니다. 다음 코드를 사용해 응용프로그램에서 이 클래스의 State 사전에 액세스합니다.

    private void Application_Deactivated(object sender, DeactivatedEventArgs e)
    {
        PhoneApplicationService.Current.State["key"] = "value";
    }
    
    
  • State 사전에 저장하는 모든 데이터는 직접 또는 데이터 계약을 통해 직렬화할 수 있어야 합니다. 자세한 내용은 데이터 계약 사용을 참조하세요.

개별 휴대폰 기능의 실행 모델 고려 사항

기능

설명

푸시 알림

응용프로그램이 실행될 때마다 이 응용프로그램이 이전에 삭제 표시되었는지에 상관없이 응용프로그램에서 알림 채널이 더 이상 유효하지 않아 다시 만들어야 한다고 가정합니다. 알림 채널을 만드는 방법에 대한 자세한 내용은 Windows Phone 8의 원시 알림을 보내고 받는 방법을 참조하세요.

표시: