안녕하세요. 이동규(LiveDK)입니다.

이번 강좌에서는 Windows Phone Application의 lifetime에 대해서 이야기 해볼까 합니다. 하나의 Windows Phone Application이 시작하여 Activated, Deactivated, Tombstoning, 소멸 될때 까지의 흐름에 대해서 알아 보겠습니다. 

Windows Phone은 tombstoning(Windows Phone - #7 Tombstoning 강좌 참고) 이나 다른 어플리케이션의 상태 변화에 따른 일련의 이벤트API들을 제공해 줍니다. Microsoft.Phone.Shell namespace 에서 찾아 볼 수 있는 PhoneApplicationService 클래스는 어플리케이션의 lifetime의 다양한 부분을 접근할 수 있도록 도와줍니다.

PhoneApplicationService는 크게 4가지 이벤트를 노출합니다. Visual Studio 2010을 사용하여 Windows Phone Application 프로젝트를 생성한다면 App.xaml.cs 코드-비하인에서 자동 생성된 몇몇 이벤트들을 볼 수 있습니다.(코드1 참고)

// Code to execute when the application is launching (eg, from Start)

// This code will not execute when the application is reactivated

private void Application_Launching(object sender, LaunchingEventArgs e)

{

} 

// Code to execute when the application is activated (brought to foreground)

// This code will not execute when the application is first launched

private void Application_Activated(object sender, ActivatedEventArgs e)

{

} 

// Code to execute when the application is deactivated (sent to background)

// This code will not execute when the application is closing

private void Application_Deactivated(object sender, DeactivatedEventArgs e)

{

} 

// Code to execute when the application is closing (eg, user hit Back)

// This code will not execute when the application is deactivated

private void Application_Closing(object sender, ClosingEventArgs e)

{

}

코드1. App.xaml.cs에 자동 생성된 내용 

 네가지 주요 이벤트에 대해서 학습 해 보겠습니다.

  • Application Launching
  • Application Deactivated
  • Application Activated
  • Application Closing

1. Application Launching - Windows Phone Application은 사용자가 뒤로가기 버튼을 눌러 이전의 어플리케이션으로 돌아가는 방법을 제외하고 어플리케이션을 시작할때 "launched"로 간주합니다. 예로 어플리케이션 목록이나 시작의 타일에서 해당 앱을 클릭하여 "launched" 될 수 있습니다.

2. Application Deactivated - 이 이벤트는 다른 어플리케이션이 화면의 제어를 가지는 경우, 예를 들어 사용자가 Start 버튼을 눌르는 경우, 발생하게 됩니다. 어플리케이션이 종료되는것 과는 다르게, Deactivated된 어플리케이션은 대부분 tombstone 상태가 됩니다. 이 상태는 어플리케이션이 완전히 종료되어 Exited 되는것 과는 다르게 Windows Phone 운영체제 스스로 어플리케이션 상태를 저장하게 됩니다. 이러한 매카니즘 덕분에 뒤로가기 버튼을 눌렀을 경우 이전에 작업한 화면으로 전환이 가능 하게 됩니다.

3. Application Activated - 어플리케이션이 deactivated 된 이후, 그 어플리케이션은 다시 reactivated 될 가능성이 없을 수 도 있습니다. 하지만 사용자가 뒤로가기 버튼을 눌러 어플리케이션을 다시 reactivated 할 가능성 또한 있습니다. 사용자가 deactivated 된 어플리케이션으로 다시 돌아갈 경우 reactivated 되었다고 하며 이때 Activated 이벤트가 발생하게 되며 마지막에 보았던 화면으로 돌아가게 됩니다. 하지만 지난 강좌(Windows Phone - #7 Tombstoning)에서 설명했듯이 내부 데이터는 초기화 될 수 있습니다.

4. Application Closing - 이 이벤트는 어플리케이션의 첫 페이지에서 뒤로가기 버튼을 눌렀을 경우 발생합니다. 실행한 어플리케이션 내에서 이곳 저곳으로 네비게이트 되어 뒤로가기 버튼을 수차례 눌러 다시 첫 페이지에 도착하여 다시한번 뒤로가기를 누를경우를 말합니다.(참고, Windows Phone - #4 Navigation) 현재, 이러한 방법이 어플리케이션을 종료하는 방법입니다. 한번 어플리케이션이 종료된 후에는, 프로세스가 종료되며 운영체제는 메모리에서 해당 어플리케이션을 추적할 수 있는 어떠한 단서도 남김 없이 삭제합니다. 또한 다시 어플리케이션을 실행하기 전까지는 어떠한 방법으로도 돌아 갈 수 없습니다.

대부분의 경우, 어플리케이션이 launching 혹은 tombstone 상태로 부터 돌아왔을 경우 아래의 순서대로 메서드가 실행됩니다.

1. Application 생성자 - App(), (위치 App.xaml.cs)
2. Application launching - Application_Launching, (위치 App.xaml.cs)
3. 사용자 Application의 페이지 생성자
4. 사용자 Application의 페이지의 OnNavigatedTo 메서드 호출

참고, tombstone 상태에서 돌아올 경우 3, 4번은 해당 페이지 입니다.

이상으로 Windows Phone Application이 실행되고 Tomestone되며 다시 Reactivated 되고 최종적으로 종료될때까지 lifetime에 대해서 살펴 보았습니다. 진정으로 Windows Phone Application 개발을 하신다면 이러한 경우를 모두 고려하여 작생해야 사용자에게 최고의 경험을 안겨줄 것 입니다. 

참고자료
Windows Phone Silverlight Application Faster Load Time - http://bit.ly/dHwLjx
Posted by Dongkyu
,