티스토리 뷰

WindowsPhone

WP7 개발 기초 - Tombstoning의 이해.

생각많은 소심남 2012. 1. 2. 18:00
지난 포스팅에선 Tombstoning이 뭔지 잠깐의 예시를 통해서 언급을 해봤는데 실습을 통해서 하나씩 따라가고자 합니다.

이번에 할 프로젝트는 ContentGrid의 색을 바꿔주면서 누른 횟수를 출력하게끔 하는 겁니다.

 



전반적인 내용은 거의 맨처음에 했던 silverlightSimpleNavigation가 거의 유사합니다. 다만 numTap을 따로 지정해서 누른 회수를 받은 후 그걸  PageTitle의 text로 뿌려주는 것까지 구현된 겁니다.

결과는 다음과 같습니다. 

 


보다시피 창이 넘어가는 과정에서 시작버튼을 누르게 되면 원래의 타일 UI가 나타나게 됩니다.
그와중에 back버튼을 꾹 누르면 현재 떠 있는 어플리케이션들의 상태도 확인할 수 있습니다. 좀 책의 예제와 다른 부분이 있긴 하네요. 책에서는 시작 버튼을 눌렀을때 쓰레드가 종료되는 것으로 보여주는데 여기서는 단순히 Serialization이 로딩되고 쓰레드는 종료가 안됩니다. 다만 프로그램을 다시 실행시켰을 때는 기존에 저장되어 있는 데이터가 사라지고 다시 처음으로 돌아 간 것을 확인 할 수 있습니다.

 윈폰을 실행시켜보신 분은 아시겠지만 보통 프로그램이 구동되고 back 버튼으로 눌렀을 때를 제외하고는 이전의 상태를 가지고 있어야 합니다. 그런데 지금 위의 예시를 보면 프로그램을 다시 실행시켰을 때 정보가 사라집니다. 간단하게 말하자면 Tombstoning이 반만 구현된거겠지요. 개발자 입장에서는 다른 어플리케이션을 구동하는 도중에도 일정 기간동안은 전에 동작시켰던 정보를 가지고 있길 원하겠지요.

이 경우에는 어떻게 하는게 좋을까요? 책에서 제시한 방법은 상태를 담고 있는 데이터를 페이지를 넘길때마다 저장하고 받아오기를 반복하는 겁니다. 역시 이전 프로젝트에서 다뤘던 OnNavigatedTo와 OnNavigatedFrom을 이용하면 해결할 수있습니다. 이와중에 PhoneApplicationService를 써야하고 물론 Microsoft.Phone.Shell을 추가해서 state에 관한 것을 클래스 내에서 다뤄야 합니다.

 



데이터 직렬화 포스팅에선 PhoneApplicationService.Current 를 다 써줬지만 이 부분을 따로 appService로 새로 정의했습니다.

 


추가한 부분은 바로 이 부분이 됩니다. 어떻게 보면 데이터 직렬화 예제와 위의 tombstoning예제가 합쳐진것 같은 느낌이 듭니다. OnNavigatedFrom에서는 numTap과 backgroundColor에 대한 정보가 State에 저장이 되고 있습니다.

반면 OnNavigatedTo에서는 From에서 받은 데이터가 있는지를 확인한 후 그 정보로 다시 갱신시켜주는 역할을 하고 있습니다. 서로 상호적으로 동작하는거겠지요.
여기서 눈여겨 봐야 할 것은 배경색을 저장받을때 입니다.
 ContentPanel의 Background색은 기본값이 null로 되어 있습니다. 그런데 이때 ContainKey를 이용해서 값이 있는지를 확인하면 당연히 key가 없기 때문에 예외구문이 발생할 겁니다. 

이를 해결하기 위해서 책은 두가지 방법을 제시하고 있습니다.  첫번째는 잠시 이야기한 딕셔너리 상에서 key값이 있는지를 확인하는 것, 또는 위의 예시처럼 TryGetValue를 통해서 값이 있으면 true를 내보내게끔 하는 겁니다.

그런데 실행결과가 어째 전에 했던것과 똑같네요..올바로 컴파일했던거라면 기존에 헸던 Tombstoning 예제에선 값을 이어받지 못하고 그대로 쓰레드가 종료가 되고, 이번 예제에서야 말로 쓰레드 종료후에도 데이터가 살아있는 것을 보여줘야 합니다만... 지금 결과로 볼때는 뭔가가 잘못 된거 같고, 조금 확인해봐야 할 듯 합니다. 아무튼 shell상에 Data를 저장하고 key값을 통해서 다시 불러오는 것을 통해서 Tombstoning과 Ressuraction 이 이뤄지는 것을 이번 포스팅을 통해서 확인할 수 있어야 합니다.

댓글