清除WP8中Page使用的内存
本文关键字:内存 Page WP8 清除 | 更新日期: 2023-09-27 18:20:44
我创建了一个小游戏(只是通过xaml,而不是xna),这个游戏有4个xaml页面:MainPage、ChoseLevelPage、PlayingPage和ScorePage我第一次玩游戏时,游戏运行得很顺利(从主页->选择级别页面->播放页面导航)当关卡结束时,它从播放页面->记分页面->主页导航
但当我第二次选择关卡和游戏时(主页->选择关卡页面->播放页面),动作选择关卡(从选择关卡页面->播放页面)需要很长时间,而且播放页面中的游戏也非常滞后,有时会导致我的应用崩溃
我的播放页面包含一个MediaElement(级别的播放歌曲)、一个DispatcherTimer(级别的关闭时间)和一个StoryBoard,每2秒后重复一次(级别的每个回合)
在OnNavigatedFrom事件中,我将媒体元素和故事板设置为停止,但我只是不知道它们是否从内存中清除(以及我在PlayingPage中使用的其他资源)?
void dispatcherTimer1_Tick(object sender, EventArgs e)
{
if (time > 0) // this variable cout the time left, decreased by 1 second
{
time --;
}
else // when "time" =0, stop the level and navigate to ScorePage
{
dispatcherTimer1.Stop(); // stop the dispatcher
NavigationService.Navigate(new Uri("/Pages/ScorePage.xaml", UriKind.Relative));
}
}
protected override void OnNavigatedFrom(NavigationEventArgs e)
{
myStoryboard.Stop(); // stop the story board
meSong.Stop(); // stop the mediaelement
App.MyModel.PlayingSong = null; // set source of the medialement to null
base.OnNavigatedFrom(e);
}
当您返回MainPage时,请确保清除后堆栈,否则您以前的PlayingPage实例将保留在内存中,这可能解释了您面临的问题。
您可以通过一个简单的循环清除后台,最好是在MainPage:的OnNavigatedTo
事件中
while (this.NavigationService.BackStack.Any())
{
this.NavigationService.RemoveBackEntry();
}