2017-04-17 4 views
0

내 UWP 앱이 일시 중지되었을 때 프리즘을 사용하여 개체를 저장하려고 시도하기 때문에 다시 시작하거나 시작할 때 복원 할 수 있습니다. 저장은 앱의 Suspending 이벤트가 시작되고 오브젝트가 Resume 및 LaunchApplicationAsync에서 검색 될 때 수행됩니다.UWP 프리즘 SessionStateService가 사용자가 닫은 후에 상태를 잃습니다.

디버그에서 Visual Studio 일시 중지 및 다시 시작을 사용할 때 개체가 올바르게 복원되지만 일시 중지 및 종료 또는 응용 프로그램을 직접 종료 할 때 개체가 복원되지 않습니다. 이 동작은 RestorableState 주석이있는 프리미티브 속성과 동일합니다.

종료 후 앱이 시작되면 SessionState 사전에 하나의 항목 ('AppFrame'키 - 프리즘으로 삽입 된 것처럼 보임) 만 표시되어 사전을 재설정 할 수 있습니다. Suspended 상태 (즉, 사용자가 종료하거나 사용자가 닫을 때)를 초과하여 저장 한 값을 유지하려면 특별한 조치가 있습니까?

protected override Task OnLaunchApplicationAsync(LaunchActivatedEventArgs e) 
    { 
     ApplicationView.GetForCurrentView().TryEnterFullScreenMode(); 

     RootPageViewModel.ShellNavigation(typeof(SurveyListPage)); 

     RootPageViewModel.RestorePropertyStates(); 

     return Task.FromResult(true); 
    } 

그리고 RestorePropertyStates 방법 : 또한

public void RestorePropertyStates() 
    { 

     if (SessionStateService.SessionState.ContainsKey(nameof(CurrentLocation))) 
     { 
      CurrentLocation = SessionStateService.SessionState[nameof(CurrentLocation)] as ViewLocation; 
     } 
    } 

속성 저장 방법 :

public void SavePropertyStates() 
    { 
     if (SessionStateService.SessionState.ContainsKey(nameof(CurrentLocation))) 
     { 
      SessionStateService.SessionState.Remove(nameof(CurrentLocation)); 
     } 
     SessionStateService.SessionState.Add(nameof(CurrentLocation), CurrentLocation); 
    } 

답변

0

을 여기

는 App.xaml.cs를에서 발사 방법 그 이유는 ViewLocation 유형이 알려진 유형이 아니기 때문에 직렬화 할 수 없으며 토드. 메서드를 사용하여 알려진 유형 목록에 SessionsStateService을 추가하거나 string과 같은 간단한 유형으로 직렬화해야합니다.

일반적으로 Json.NET 라이브러리를 사용하여 모든 복합 유형을 JSON 문자열로 직렬화하기 위해 세션 상태 위에 레이어를 만듭니다. 이렇게하면 새 유형을 추가하는 것을 기억해야하는 번거 로움을 덜어줍니다.

+0

알려진 유형에 ViewLocation을 추가했습니다. 이것은 복잡한 유형이지만, 알려진 유형으로 정의되지 않은 객체를 무시하고 원시 속성을 직렬화해야한다고 가정합니다. ViewLocation의 속성을 직렬화 할 수 없기 때문에 깨진 경우에도 [RestorableState]가없는 프리미티브를 저장해야합니까? – fralama