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

지난 Windows Phone 두번째 포스팅(Windows Phone - #2 A First Silverlight Phone Program)에서 개발툴 설치에관하여 언급한적이 있었습니다. 이번에 새로 업데이트 되어 내용을 소개 할까 합니다. 가장 중요한 다운로드 경로는 아래와 같습니다.

Windows Phone Developer Tools January 2011 Update
http://bit.ly/btXs5X

어떤것들이 추가 되었는지 살펴보겠습니다. (Release Notes - January 2011 Update)를 참고 하여 설명하였습니다.

Copy and Paste
모든 곳에서 추가된것이 아니라 아래의 컨트롤에서 사용이 가능합니다.

  • System.Windows.Controls.TextBox
  • System.Windows.Controls.PasswordBox
  • Microsoft.Phone.Controls.WebBrowser 에서 Text를 사용하는 필드

저와 같은 개발자들은 에뮬레이터에서 테스트가 가능합니다. 아래 그림1,2 와 링크에서 눈으로 확인해 볼 수 있습니다. 만약,혹시나ㅎㅎ Windows Phone 유저라면 운영체제 업데이트 후에 사용하시면 됩니다.

그림2. 키보드위에 붙여넣기 아이콘

Windows Phone Capability Detection Tool
Windows Phone Capability Detection Tool을 사용 하여 제작한 어플리케이션이 폰에서 사용되는 기능들을 찾아낼 수 있습니다. Marketplace에 자신이 만든 어플리케이션을 제출하면 Microsoft 에서는 코드를 분석하여 어플리케이션에서 폰의 어떠한 기능을 사용하는지 발견하고 어플리케이션 manifiest 파일에 사용하는 기능들을 적습니다. 이러한 일련의 과정을 똑같이 하는 툴을 제공하는 것입니다. 자세한 사용법은 다음 링크를 확인하세요:)

Windows Phone Connect Tool
Windows Phone Connect Tool 이 툴은 Zune software가 실행중이지 아니더라도 Windows Phone에 Serial 이나 USB연결을 허용하게 해줍니다. 실제 장치로 테스트를 할 경우 보통은 Zune software가 켜져 있습니다. 그러나 medai API 관련하여 테스트를 할경우 Zune 쪽에서 Lock을 걸고 있기 때문에 어려움이 있습니다. 이를 Zune을 꺼도 허용해주게 됩니다. 자세한 내용은 링크를 확인하세요^^

Updated Bing Maps Silverlight Control
Bing Maps Silverlight Control를 사용할 경우 좀더 향상된 제스쳐 기능을 포합하고 있습니다.

참고자료
Windows Phone Developer Tools - http://bit.ly/btXs5X
MSDN - How to: Test Copy and Paste in Windows Phone Emulator - http://bit.ly/e9KjXq
MSDN - How to: Use the Capability Detection Tool for Windows Phone - http://bit.ly/alMZ6O
MSDN - How to: Use the Connect Tool for Windows Phone - http://bit.ly/aS0wzi
MSDN - Bing Maps Silverlight Control for Windows Phone - http://bit.ly/9prZuI
Posted by Dongkyu
,

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

이번 포스팅에서는 이름하여 Tombstoning, Windows Phone 에서 실행중인 어플리케이션이 빠져 나왔을경우(Deactivation) 그리고 다시 진입할 경우(Reactivation) 이전 상태의 보존에 대해서 알아보려고 합니다.

어플리케이션은 한번에 한번만 인터럽트 될 수 있습니다. 예를 들어 어플리케이션 실행중에 전화가 오거나 Start, Search 버튼을 눌렀을경우 'tombstoned'상태가 됩니다. 또한 통화가 끝나거나 다시 Back 버튼으로 어플리케이션으로 돌아가면 'reactivated'상태로 바뀝니다.

Tombstoned 상태일동안 어플리케이션의 메모리는 Unloaded 됩니다. 하지만 운영체제에서는 폰의 화면 상태들을 임시로 보관하게 됩니다. 폰이 다시 reactivated 상태로 돌아오면 마지막에 나왔던 화면이 보여지게 됩니다. 하지만 단순히 화면 외에 다른 모든것들(데이터 포함)은 직접 해줘야 합니다. 예제를 통해 어떻게 마지막 상태를 보존하고 다시 돌아올경우 복원하는지에 대해서 알아 보겠습니다.

예제
어플리케이션내에 버튼을 클릭했을때 클릭 횟수를 카운트 하여 페이지 타이틀에 숫자를 뿌려줍니다. 이후 Start 버튼을 눌러 Tombstoned 상태를 만든후 Back 버튼을 눌러 Reactivated 상태로 전환하여 타이틀 숫자를 복원합니다.

그림1. 예제 디자인 모습

그림1 과 같이 디자인(타이틀명 변경, 버튼추가)을 완성한 후 코드-비하인드에서 코드1과 같이 작업해줍니다. 생성자에서 UpdateCount 메서드를 호출하며 버튼을 클릭했을경우에도 메서드를 호출합니다.

int count = 0;

// Constructor

public MainPage()

{

    InitializeComponent();

    UpdateCount(count);

}

 

private void UpdateCount(int count)

{

    textBlockTitle.Text = "Count: " + count;

}

 

private void buttonCount_Click(object sender, RoutedEventArgs e)

{

    UpdateCount(++count);

}

코드1. UpdateCount 추가

이와 같이 작성후 프로그램을 실행하여 버튼을 클릭해보면 카운터가 증가하는 모습을 볼 수 있으며 Start 버튼을 눌러 빠져나온후 Back 버튼으로 뒤로가게되면 "Resuming..." 화면과 함께 복원되는것을 볼 수 있습니다. 하지만 카운터의 숫자는 다시 0으로 초기화 되버렸습니다. 그림2 참고

그림2. 실패한 Tombstoning 복원

이제 성공적인 Tombstoning을 위해 코드를 추가해 보겠습니다. 핵심적인 이벤트 두가지가 필요 합니다.
OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
첫번째 이벤트의 경우는 이전 포스팅(Windows Phone - #6 Passing Parameters)에서 한번 사용해 보았었습니다. 첫번째 이벤트는 현재의 페이지로 화면이 넘어올때 발생하며 두번째 이벤트는 현재 페이지를 떠날때 발생합니다.

OnNavigatedTo 에서는 값을 얻어오고,
OnNavigatedFrom 에서는 값을 저장하면 될 것입니다.

 

int count = 0;

PhoneApplicationService pService = PhoneApplicationService.Current;

// Constructor

public MainPage()

{

    InitializeComponent();

    UpdateCount(count);

}

 

private void UpdateCount(int count)

{

    textBlockTitle.Text = "Count: " + count;

}

 

private void buttonCount_Click(object sender, RoutedEventArgs e)

{

    UpdateCount(++count);

}

 

//떠날 값을 저장

protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)

{

    pService.State["count"] = count;

    base.OnNavigatedFrom(e);

}

 

//들어올 로드

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)

{

    //count 키가 존재할때

    if (pService.State.ContainsKey("count"))

    {

        count = (int)pService.State["count"];

        UpdateCount(count);

    }

    base.OnNavigatedTo(e);
}

코드2. 전체 코드 작성

다시한번 어플리케이션을 실행하여 예제처럼 테스트 해보면 Tombstoned 상태에서 Reactivated 상태로 돌아와도 Count 값을 유지하는것을 볼 수 있습니다. 핵심적인 코드는 바로 PhoneApplicationService 에 있습니다.
PhoneApplicationService 클래스는 Microsoft.Phone.Shell 네임스페이스에 있으며 어플리케이션이 idle 상태 및 active 혹은 inactive 상태를 관리합니다.

참고자료
Programming Windows Phone 7 by Charles Petzold - http://www.charlespetzold.com/phone/
Windows Phone 7 Design Tips: Navigation, Tombstoning, and Data Loading - http://bit.ly/hXv7DB
MSDN - How to: Preserve and Restore Page State for Windows Phone - http://bit.ly/gOAPdu
MSDN - PhoneApplicationService Class - http://bit.ly/iamLFb
Posted by Dongkyu
,