是否有正确处理墓碑和回钥匙的最佳做法?
正如MSDN中所述,您应该将瞬态数据保存在OnNavigatedFrom方法中。好的,所以当墓碑化时保存状态的代码是清楚的。
但是现在,如果按回键,OnNavigatedFrom方法也会被调用,如果不添加额外的检查,那么首先将状态保存到字典中,然后不久页面就会被销毁。PhoneApplicationPage.State字典也是如此。因此节省的代码完全是浪费的CPU、磁盘和电池时间的。
我所做的就是为了防止这一切:
protected override void OnNavigatingFrom(System.Windows.Navigation.NavigatingCancelEventArgs e)
{
// when navigating back
if (e.NavigationMode == System.Windows.Navigation.NavigationMode.Back)
{
backKeyPressed = true;
}
}
protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
{
if (backKeyPressed)
{
// Don't save states on back key!
backKeyPressed = false; // set it anyway
return;
}
// Tombstoning
// save objects
this.SaveState("text", someText);
...
}提醒您:只有在离开/返回页面时才会调用OnNavigatingFrom,而不是当应用程序被删除时才调用。
附带注意:显示的代码只覆盖只能向后导航的页面。这就是为什么我将backKeypressed添加到OnNavigatingFrom中。如果页面可以导航到另一个页面,则需要额外的检查。
backKeyPressed变量并检查我创建的每个页面吗?你对此有何看法?
编辑:
更新的问题,使它更清楚。
发布于 2011-04-05 21:12:05
您在OnNavigatingFrom中检查导航方向的方法确实是推荐的做法,以避免在页面从后台移除之前保存状态不必要的性能影响。
我想在示例代码中添加一个说明:您应该检查“NavigationCancelEventArgs”中的“NavigationCancelEventArgs”属性,以确定它是向前导航还是向后导航。
然后,如果状态是前向导航,则只保存OnNavigatedFrom中的状态,如您的示例所示。这将有助于提高用户向后导航时的性能。
发布于 2011-04-05 10:29:05
你所需要知道的关于墓碑的一切都在Jeff的4部分Windows 7中银光的真实世界墓碑博客系列文章中涵盖。您可能需要特别注意第2部分,其中Jeff讨论了在应用程序退出时清除状态。
https://stackoverflow.com/questions/5550176
复制相似问题