当Win8程序挂起时,就需要对状态进行保持,当激活进入程序后给用户一种程序始终在运行的良好体验~~
导航状态保持
当程序进入挂起状态或暂停时就需要保存当前访问的页面,使程序激活时返回之前的页面。导航状态很简单,在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(); }
毫无理由的 坚持、坚持、再坚持!