首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >由于性能原因,正确处理墓碑和回钥匙?

由于性能原因,正确处理墓碑和回钥匙?
EN

Stack Overflow用户
提问于 2011-04-05 10:03:28
回答 2查看 1.5K关注 0票数 5

是否有正确处理墓碑和回钥匙的最佳做法?

正如MSDN中所述,您应该将瞬态数据保存在OnNavigatedFrom方法中。好的,所以当墓碑化时保存状态的代码是清楚的。

但是现在,如果按回键,OnNavigatedFrom方法也会被调用,如果不添加额外的检查,那么首先将状态保存到字典中,然后不久页面就会被销毁。PhoneApplicationPage.State字典也是如此。因此节省的代码完全是浪费的CPU、磁盘和电池时间的

我所做的就是为了防止这一切:

代码语言:javascript
复制
    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中。如果页面可以导航到另一个页面,则需要额外的检查。

  1. 是否有更好的方法对您所创建的每一页进行此操作?
  2. 现在,我真的需要添加backKeyPressed变量并检查我创建的每个页面吗?
  3. 框架不应该为我们的开发人员提供一些东西,所以我们不必担心这个问题吗?

你对此有何看法?

编辑:

更新的问题,使它更清楚。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-04-05 21:12:05

您在OnNavigatingFrom中检查导航方向的方法确实是推荐的做法,以避免在页面从后台移除之前保存状态不必要的性能影响。

我想在示例代码中添加一个说明:您应该检查“NavigationCancelEventArgs”中的“NavigationCancelEventArgs”属性,以确定它是向前导航还是向后导航。

然后,如果状态是前向导航,则只保存OnNavigatedFrom中的状态,如您的示例所示。这将有助于提高用户向后导航时的性能。

票数 2
EN

Stack Overflow用户

发布于 2011-04-05 10:29:05

你所需要知道的关于墓碑的一切都在Jeff的4部分Windows 7中银光的真实世界墓碑博客系列文章中涵盖。您可能需要特别注意第2部分,其中Jeff讨论了在应用程序退出时清除状态。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5550176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档