'윈도우폰'에 해당되는 글 1건

  1. 2010.08.13 [wp7] 윈폰에서 전화가 울리거나 검색에 갔을때 저장?
Windows Phone 72010. 8. 13. 16:16

윈도우폰을 사용중에  전화가 오거나 빙검색을 하기 위해 서치 버튼을 눌렀다가 다시 원래 화면으로 돌아온다면?

모든 텍스트 박스나 바인딩이 초기 값으로 세팅해져있을것이다.

예를들면 랜덤넘버 프로그램에서 최소값 3과 최대값 300을 썻는데  빙검색을 누르거나 전화를 받았거나 문자를 받았다면

사용자는 자기가 하고 있던값이 사라지면 황당할것이다.

다행히 파일에 저장하는 IsolatedStorage가 있지만 우리는 영원히 저장하는것이 아니라 잠시 전화가 오기전의 상태를 저

장하기를 원한다.

우리가 그 상태정보를 영원히 가지고 있을 필요가 없다는것이다.

 

그렇다면 IsolatedStorage도 좋은 선택이 아니다.

 

PhoneApplicationService.Current.State

 

이걸 쓰면 어떨까? 이건 사용법은 isolatedStroage와 같지만 다른점은 어플이 종료가 될때는 사라진다는점이다.

즉 종료하지 않고 어떤 다른곳 으로 네비게이션을 하게 된다면 여기 데이터는 계속 살아있지만 종료를 하면 없어지기때문에 현재 상태를 파일에 쓰는것 보다 더 나은 성능 향상과 메모리 사용률 최적화를 기대할수 있다.

 

이걸 적용하기 위해서 네비게이션을 이동하기 전에 실행되는 함수와 이동이 되었을때 실행이 되는 함수에 넣으면 된다.

 

먼저 이동전에 현제 상태를 PhoneApplicationService.Current.State에 저장한다.

protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
{
    RandomNumberStateData _randomNumberStateData = new RandomNumberStateData();
    _randomNumberStateData.TextBoxStart = StartNumberText.Text;
    _randomNumberStateData.TextBoxEnd = EndNumberText.Text;
    _randomNumberStateData.ButtonRandomNumber = button.Content.ToString();            
    
    if (PhoneApplicationService.Current.State.ContainsKey("RandomNumberState") == true)
    {
        PhoneApplicationService.Current.State.Remove("RandomNumberState");             
    }
 
    if (e.Content == null)
    {
        PhoneApplicationService.Current.State.Add("RandomNumberState", _randomNumberStateData);
    }
}

 

이렇게 저장을 하였으면  이제 볼일을 보고 다시 왔을때 이 상태 값들을 다시 원래 대로 복원을 해줘야 한다.

 

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
       {
           var dc = this.DataContext as RandomNumberViewModel;
           dc.ShakeSenserStart();
 
           if (PhoneApplicationService.Current.State.ContainsKey("RandomNumberState") == true)
           {
               var randomNumberStateData = PhoneApplicationService.Current.State["RandomNumberState"] as RandomNumberStateData;                
               dc.MinNumberValue = randomNumberStateData.TextBoxStart;
               dc.MaxNumberValue = randomNumberStateData.TextBoxEnd;
               dc.RandomNumberValue = randomNumberStateData.ButtonRandomNumber;
               //button.Content = randomNumberStateData.ButtonRandomNumber;                
           }
       }

 

큰 어려움은 없다 . 

참고 : http://windowsteamblog.com/windows_phone/b/wpdev/archive/2010/07/20/understanding-the-windows-phone-application-execution-model-tombstoning-launcher-and-more-part-3.aspx

Posted by 동동(이재동)