windows-phone-7 – 出于性能原因正确处理Tombstoning和Back键?
是否有正确处理墓碑和后退键的最佳做法?
正如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.如果页面可以导航到另一个页面,则需要额外检查. >对于您创建的每个页面,有更好的方法吗? 你对此有何看法? 编辑: 更新的问题使其更清晰. 解决方法
你在OnNavigatingFrom中检查导航方向的方法确实是推荐的做法,以避免在页面从backstack中删除之前保存状态的不必要的性能损失.
我想在示例代码中添加一个说明:您应该检查’NavigationCancelEventArgs’中的’NavigationMode’属性,以确定它是向前还是向后导航. 然后,如果它是正向导航,则仅在OnNavigatedFrom中保存状态,如示例所示.当用户向后导航时,这将有助于提高您的表现. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |