0

我有一个为Windows 8.1和Windows Phone 8.1构建的应用程序。在平板电脑和电话项目中共享的便携式类库中有一个非静态类,其中包含静态成员。在电话中,墓碑上的静态属性会丢失。如何将可移植类库的静态类成员存储在停用的事件中,并在电话生命周期的激活事件中将其还原(移植到可移植类库内的非静态类的当前实例),以便在墓碑后应用程序继续运行,没有任何崩溃。在Windows Phone 8.1墓碑中恢复可移植类库内类的静态属性

回答

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项目模板(或类似项目)包含您可以使用的应用程序生命周期事件的框架代码。

如何存放在停用事件便携式类库的静态类成员和恢复(到便携式类库里面的非静态类的当前实例)...

你的班级是非静态的这一事实并不重要;您在该类中具有静态成员,该成员在该类的所有实例中共享。你不能恢复你的类的一个实例的静态成员的状态;这没有任何意义。