0

Windows 8.1 및 Windows Phone 8.1 용으로 작성된 응용 프로그램이 있습니다. 태블릿과 전화 프로젝트 모두에서 공유되는 휴대용 클래스 라이브러리에는 정적 멤버가 포함 된 비 정적 클래스가 있습니다. 전화기에서, 삭제 표시시 정적 속성이 손실됩니다. 휴대용 라이프 클래스의 정적 클래스 멤버를 비활성화 이벤트에 저장하고 휴대 전화 수명주기의 활성화 된 이벤트에서 복원 (휴대용 클래스 라이브러리 내부의 비 정적 클래스의 현재 인스턴스로)하면 어떻게합니까? 응용 프로그램이 충돌없이 계속 실행됩니다.휴대용 클래스 라이브러리 내에서 클래스 라이브러리의 정적 속성 복원 Windows Phone에서 삭제 표시 후

답변

0

정적 멤버의 액세스 수준에 따라 다릅니다.

공개되어 있고 Windows Phone 응용 프로그램에서 직접 액세스 할 수있는 경우 적절한 응용 프로그램 수명주기 핸들러 (또는 SuspensionManager 클래스)에서 응용 프로그램 상태와 평소대로 저장하고 복원 할 수 있습니다. 그게 당신이 사용하는 경우). 즉, 이식 가능한 클래스 라이브러리는 "응용 프로그램 수명주기"또는 "상태 저장/복원"또는 그와 비슷한 것을 신경 쓰지 않습니다. 대신이 동작을 제공하는 것은 Windows Phone 응용 프로그램의 책임이므로이 클래스 라이브러리는 Windows Phone 관련 요구 사항과 독립적으로 유지 될 수 있습니다.

비공개 인 경우 휴대용 클래스 라이브러리는 내부 상태를 저장하고 복원하는 방법을 제공해야합니다. 정적 메서드를 노출하여 Windows Phone 응용 프로그램의 해당 응용 프로그램 수명주기 처리기에서 호출 할 수 있습니다. 당신은 예를 들어, 응용 프로그램의 중단 핸들러에서이 메서드를 호출 할 것

public static void SaveState(Dictionary<string, object> stateDict) 
{ 
    // store state of static members in the dict 
    stateDict["Foo"] = SomeClass.FooStaticMember; 
    stateDict["Bar"] = SomeClass.BarStaticMember; 
    ... 
} 

: 예를 들어, 같은 휴대용 클래스 라이브러리의 방법이있을 수 있습니다 마찬가지로

public App() 
{ 
    this.InitializeComponent(); 
    this.Suspending += this.OnSuspending; 
} 

private async void OnSuspending(object sender, SuspendingEventArgs e) 
{ 
    var deferral = e.SuspendingOperation.GetDeferral(); 

    // save PCL state here 
    MyPortableClassLibrary.SaveState(SuspensionManager.SessionState); 

    await SuspensionManager.SaveAsync(); 
    deferral.Complete(); 
} 

, 당신은 것 e.PreviousExecutionState == ApplicationExecutionState.Terminated 일 때 App.OnLaunched 재정의 방법에서 상태를로드하십시오. Pivot App 프로젝트 템플릿 (또는 유사)에는 작업 할 수있는 응용 프로그램 수명주기 이벤트에 대한 골격 코드가 포함되어 있습니다.

어떻게 ... 내가 비활성화 된 경우에 휴대용 클래스 라이브러리의 정적 클래스 멤버를 저장하고 (휴대용 클래스 라이브러리 내부의 비 정적 클래스의 현재 인스턴스에 )을 복원 할

클래스가 비 정적이라는 사실은 중요하지 않습니다. 해당 클래스의 모든 인스턴스간에 공유되는 해당 클래스의 정적 멤버가 있습니다. 클래스의 한 인스턴스 만 정적 멤버 상태로 복원 할 수는 없습니다. 그건 말이 안되 잖아.