У меня есть приложение, созданное как для Windows 8.1, так и для Windows Phone 8.1. Существует нестатический класс со статическими элементами в переносимой библиотеке классов, которая используется как планшетными, так и телефонными проектами. В телефоне при надгробии теряются статические свойства. Как сохранить члены статического класса переносимой библиотеки классов в деактивированном событии и восстановить (в текущий экземпляр нестатического класса внутри переносимой библиотеки классов) в активированном событии жизненного цикла телефона, чтобы после захоронения приложение продолжает работать без каких-либо сбоев.
Восстановление статических свойств класса в переносимой библиотеке классов после захоронения в Windows Phone 8.1
Ответы (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
. Шаблон проекта сводного приложения (или аналогичный) содержит скелетный код для событий жизненного цикла приложения, с которыми вы можете работать.
Как сохранить члены статического класса переносимой библиотеки классов в деактивированном событии и восстановить (в текущий экземпляр нестатического класса внутри переносимой библиотеки классов)...
Тот факт, что ваш класс нестатичен, не имеет значения; у вас есть статические члены в этом классе, которые являются общими для всех экземпляров этого класса. Вы не можете восстановить состояние статических членов только одного экземпляра вашего класса; это не имеет никакого смысла.