重用PhoneApplicationPage实例

时间:2013-06-26 12:14:51

标签: silverlight windows-phone-7 windows-phone-8 windows-phone windows-phone-7.1

我正在开发一个Windows手机应用程序,我的一个页面使用一个加载一堆UIElements的全景图,占用了大量的内存。 因为每次我导航到该视图时都会重新创建页面,有没有办法重用页面实例?或者还有其他方法可以确保不会多次创建UIElements吗?

修改

导航过程如下:

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

我想要的是在第一次导航后重复使用的secundary页面实例。

由于

2 个答案:

答案 0 :(得分:1)

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

我的猜测是,在辅助页面中,您正在呼叫:

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

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

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

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

NavigationService.GoBack();

答案 1 :(得分:1)

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

事实上,如果你绝对想要将辅助页面保留在内存中,你可以覆盖辅助页面上的正常后退按钮行为,而不是将返回转到主页面,你会去< em>转发到主页面。当然,为了避免KooKiz的回答中提到的副作用,你必须保持背斜的顺序。

请注意,仍然无法保证辅助页面将保留在内存中,因为它由垃圾收集器决定。内存页面消耗的越多,GC的候选者就越好。