是否有正确处理墓碑和返回键的最佳实践?
正如 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
变量并检查我创建的每个页面吗? - 框架不应该为我们的开发人员提供一些东西,这样我们就不必为此担心了吗?
您对此有何看法?
编辑:
更新了问题,使其更清晰。