0

我正在开发一个 windows phone 应用程序,我的一个页面使用加载一堆 UIElements 的全景图,占用了大量的内存。由于每次我导航到该视图时,页面都会重新创建,有没有办法重用页面实例?还是有任何其他方法可以确保 UIElements 不会被多次创建?

编辑:

导航流程如下:

HomePage -> Secundary Page
Back
HomePage -> Secundary Page
Back
HomePage -> Secundary Page
etc.

我想要的是在第一次导航后重用第二个页面实例。

谢谢

4

2 回答 2

1

问题是在导航到辅助页面后如何将页面获取到主页。

我的猜测是,从二级页面,您正在调用:

NavigationService.Navigate(new Uri("/MainPage.xaml", UriKind.Absolute));

这是错误的,有两个原因:

  • 正如您所注意到的,您每次都会创建一个新的页面实例,因此会使用大量内存
  • 要退出应用程序,用户必须在导航到主页面时多次按下返回

相反,由于主页面仍然是导航堆栈,因此只需GoBack从辅助页面调用以重新使用主页面的先前实例:

NavigationService.GoBack();
于 2013-06-26T12:30:24.047 回答
1

PhoneApplicationPage的生命周期完全由运行时管理,您无法以任何方式影响它。如果用户从页面返回,它将在下次重新创建。请参阅本文档的“OnNavigatedFrom 方法”部分。

实际上,如果您绝对想将辅助页面保留在内存中,则可以覆盖辅助页面上的正常后退按钮行为,而不是返回主页,而是前进到主页。当然,您必须保持后台有序,以避免 KooKiz 的回答中提到的副作用。

请注意,仍然不能保证辅助页面将保留在内存中,因为这取决于垃圾收集器来决定。消耗的内存页面越多,它就越适合 GC。

于 2013-06-26T12:57:00.390 回答