앱을 사용하다 보면 데이터가 만들어지는데, 이 데이터를 어떻게 관리하는 지 배운다.
http://msdn.microsoft.com/ko-KR/library/windows/apps/hh986968.aspx
앱 수명 주기나 상태는 링크 페이지에서 뭔지 알면 될 것이고, 다음 내용만 숙지하면 될 것 같다.
1. SuspensionManager의 등록
2. 앱 데이터 저장
MainPage나 기타 UI 부분에서 저장이 필요한 부분에 TextChanged 등의 이벤트 발생 시 데이터를 저장시킨다.
roamingSettings.Values["컨트롤"] = 컨트롤.Text;
혼란을 줄이기 위해 이벤트가 발생한 컨트롤을 저장할 데이터의 이름으로 사용하는 것이 좋겠다.
앱 데이터를 저장하는 것은 앱의 종료 후 재시작 시 데이터를 복원하는 목적이므로 상태를 저장할 필요는 없다. 왜냐하면 상태(페이지)는 항상 초기 화면일 테니까 말이다.
3. 앱 데이터 복원
복원은 다시 두 가지로 나눌 수 있다.
- 상태(페이지, 프레임)의 복원 : 어떤 화면을 복원할 것인지 알아내서 복원
- 데이터의 복원 : 컨트롤에 표시할 데이터의 복원
상태의 복원:
App.xaml.cs의 OnLaunched 이벤트에서 어플리케이션이 마지막에 Terminated 되었었는지 확인하여, 이전 상태를 로딩한다.
유튜브에서는 Terminate당했다고 표현해서 내가 종료시킨 경우는 아닌 것처럼 설명했으나 모든 종료는 다 해당되는 듯 하다.
SuspensionManager.RestoreAsync()만 호출해주면 된다.
이 함수는 비동기이기 때문에 await 연산자를 제일 앞에 써 주어야 하며, 비동기 함수를 호출하게 되므로 비동기로 결과를 받으라고 이 함수를 가지는 메써드의 리턴 타입에 async를 적어준다.
데이터의 복원:
페이지의 복원은 MainPage.xaml.cs에서 NavigateionHelper_LoadState 메써드에서 담당한다. (세션 데이터도 이 곳에서 복원한다.) 이 메써드는 세션이 다시 시작되거나 앱이 처음 시작될 때 실행되는데, 각각의 상황은 알아서 파악한다.
어떤 컨트롤에 어떤 데이터를 복원해야 할 것인지 직접 코딩해야 한다.
4. 세션 데이터 저장
App.xaml.cs에서 Suspension 이벤트 발생 시 세션 상태를 저장한다.
상태는 Onsuspending 메써드에서 저장하는데 비동기 방식으로 저장하므로 메써드 앞에 async를 적어준다.
await Suspension.SaveState(); 로 상태를 저장한다.
세션 데이터의 저장은 MainPage.xaml.cs에서 이루어지며, NavigationHelper_SaveState 메써드에서 작성한다.
e.PageState["컨트롤"] = 컨트롤.Text;
5. 세션 데이터 복원
3번의 복원과 마찬가지이다.
이를 디버깅 모드에서 테스트 하는 방법은 역시 위의 msdn 링크에 잘 나와있다.