在Windows Phone7应用程序开发中,正确管理应用程序状态对于提供流畅的用户体验和满足应用认证要求至关重要。当应用程序进入墓碑(tombstone)状态时,开发者需要负责保存应用程序和页面状态,以便在页面重新加载时能够正确恢复并加载先前的数据。这样,用户甚至不会意识到应用程序进程被终止并重新加载了。
为了简化墓碑状态的处理,创建了一个简单的StateManager类,它在进入墓碑状态时帮助序列化数据,在返回时反序列化数据。
假设当前的页面有以下数据成员需要在墓碑状态之间保存:
所需要做的就是在应用程序进入墓碑状态时保存它们,并在从墓碑状态返回时重新加载它们。
保存数据的代码应该放在OnNavigatedFrom方法中。在这个方法中,应该为每个要保存的页面成员调用辅助扩展方法SaveState,传递值和保存的键:
protected override void OnNavigatedFrom(NavigationEventArgs e)
{
this.SaveState("LastPostsKey", LastPosts);
this.SaveState("PostsKey", Posts);
this.SaveState("CommentsKey", Comments);
this.SaveState("ImagesKey", Images);
}
加载数据的代码应该放在OnNavigatedTo方法中。在这个方法中,应该为每个要加载的页面成员调用辅助扩展方法LoadState,传递与成员值相关的键:
protected override void OnNavigatedTo(NavigationEventArgs e)
{
LastPosts = this.LoadState>("LastPostsKey");
Posts = this.LoadState>("PostsKey");
Comments = this.LoadState>("CommentsKey");
Images = this.LoadState>("ImagesKey");
}
StateManager类是如何定义的呢?它就像下面这两个扩展方法一样简单:
public static class StateManager
{
public static void SaveState(this PhoneApplicationPage phoneApplicationPage, string key, object value)
{
if (phoneApplicationPage.State.ContainsKey(key))
{
phoneApplicationPage.State.Remove(key);
}
phoneApplicationPage.State.Add(key, value);
}
public static T LoadState(this PhoneApplicationPage phoneApplicationPage, string key) where T : class
{
if (phoneApplicationPage.State.ContainsKey(key))
{
return (T)phoneApplicationPage.State[key];
}
return default(T);
}
}