Восстановление статических свойств класса в переносимой библиотеке классов после захоронения в Windows Phone 8.1

У меня есть приложение, созданное как для Windows 8.1, так и для Windows Phone 8.1. Существует нестатический класс со статическими элементами в переносимой библиотеке классов, которая используется как планшетными, так и телефонными проектами. В телефоне при надгробии теряются статические свойства. Как сохранить члены статического класса переносимой библиотеки классов в деактивированном событии и восстановить (в текущий экземпляр нестатического класса внутри переносимой библиотеки классов) в активированном событии жизненного цикла телефона, чтобы после захоронения приложение продолжает работать без каких-либо сбоев.


person theEternalStudent    schedule 05.11.2014    source источник


Ответы (1)


Это зависит от уровня доступа этих статических элементов.

Если они общедоступны и вы можете получить к ним доступ непосредственно из приложения 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();
}

Точно так же вы загрузите состояние в свой метод переопределения App.OnLaunched, когда e.PreviousExecutionState == ApplicationExecutionState.Terminated. Шаблон проекта сводного приложения (или аналогичный) содержит скелетный код для событий жизненного цикла приложения, с которыми вы можете работать.

Как сохранить члены статического класса переносимой библиотеки классов в деактивированном событии и восстановить (в текущий экземпляр нестатического класса внутри переносимой библиотеки классов)...

Тот факт, что ваш класс нестатичен, не имеет значения; у вас есть статические члены в этом классе, которые являются общими для всех экземпляров этого класса. Вы не можете восстановить состояние статических членов только одного экземпляра вашего класса; это не имеет никакого смысла.

person Decade Moon    schedule 05.11.2014