Buj*_*uju 5 back-button windows-phone-7 tombstoning
是否有正确处理墓碑和后退键的最佳做法?
正如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);
...
}
Run Code Online (Sandbox Code Playgroud)
提醒一下:OnNavigatingFrom只有在从页面导航/返回时才会调用,而不是在应用程序被逻辑删除时调用.
附注:显示的代码仅涵盖只能导航回来的页面.这就是为什么我添加backKeypressed OnNavigatingFrom.如果页面可以导航到另一个页面,则需要额外检查.
backKeyPressed变量并检查我创建的每个页面吗?你对此有何看法?
编辑:
更新的问题使其更清晰.
在 OnNavigatingFrom 中检查导航方向的方法确实是推荐的做法,以避免在页面从后退堆栈中删除之前保存状态造成不必要的性能影响。
我想在示例代码中添加一项说明:您应该检查“NavigationCancelEventArgs”中的“NavigationMode”属性以确定它是向前还是向后导航。
然后,如果是向前导航,则仅将状态保存在 OnNavieratedFrom 中,如示例所示。这将有助于提高用户向后导航时的性能。
| 归档时间: |
|
| 查看次数: |
1476 次 |
| 最近记录: |