导航状态保持
当程序进入挂起状态或暂停时就需要保存当前访问的页面,使程序激活时返回之前的页面。导航状态很简单,在App.xaml.cs中修改,共三个步骤:
1. 在中找到OnLaunched方法,进行注册:
MyApp.Common.SuspensionManager.RegisterFrame(rootFrame, "appFrame");
2. 在程序进入暂停时会触发OnSuspending方法,在它内部进行保存,采用内部编程,需要在方法声明添加async异步编程关键字:
private async void OnSuspending(object sender, SuspendingEventArgs e)
{
var deferral = e.SuspendingOperation.GetDeferral();
//TODO: Save application state and stop any background activity
await MyApp.Common.SuspensionManager.SaveAsync();
deferral.Complete();
}
3. 在重新激活时,加载导航状态,需要先判断应用程序之前的状态是否是挂起后进入OnLaunched的,在OnLaunched添加代码:
if (args.PreviousExecutionState == ApplicationExecutionState.Terminated)
{
//TODO: Load state from previously suspended application
await HelloWorld.Common.SuspensionManager.RestoreAsync();
}
数据状态保持
应用程序的数据分为用户数据、会话数据。凡是用户可以直接操作,修改的数据都是用户数据,例如输入框的内容。而会话数据则是通过交互产生的数据。如点击按钮,计算后得到的结果。
有时候我们希望用户数据可以永久保存、供多页面访问,可以使用ApplicationDataContainer对象进行保存在应用数据容器中。只在当前页面用的数据,可以保持在pageState 中。
在BasePage模版的后台代码,提供了LoadState和SaveState方法,可以在它们里面进行数据的恢复与保存。
//State保存:
pageState["msg"] = "Message";
//or
Windows.Storage.ApplicationDataContainer appDataContainer = Windows.Storage.ApplicationData.Current.LocalSetting;
appDataContainer.Values["msg"] = "Message";
//State恢复:
if(pageState != null && pageState.ContainsKey("msg"))
{
txtMsg.Text = pageState["msg"].ToString();
}
//or
Windows.Storage.ApplicationDataContainer appDataContainer = Windows.Storage.ApplicationData.Current.LocalSetting;
if(appDataContainer.Values.ContainsKey("msg"))
{
tbInput.Text = appDataContainer.Values["msg"].ToString();
}