WP8程序生命周期之快速恢复

先简述快速恢复的过程:

当程序前台运行过程中,我们按窗口键会把程序切换到后台。这时候,wp8默认的快速恢复方法是长按后退键,而我们再点击ShellTile或主程序磁贴或程序列表图标运行程序时,程序会先跳转到历史页面堆栈的最新页面,跳转参数e.NavigationMode == NavigationMode.Reset,然后自动执行新跳转到程序默认启动页或者ShellTile指定的页面,再清理掉历史页面堆栈。

所以,为了在执行点击主程序磁贴或程序列表图标运行程序时也快速恢复到最后浏览页面,我们需要把后面自动执行的新跳转取消掉,并且保留历史页面堆栈:


1、用“查看代码”方式编辑WMAppManifest.xml,在DefaultTask里添加ActivationPolicy="Resume"

<Tasks>
	<DefaultTask Name="_default" NavigationPage="StartPage.xaml" ActivationPolicy="Resume"/>
</Tasks>


2、修改App.xaml.cs文件的CheckForResetNavigation方法如下:

private bool _isResume = false;
//每次页面跳转完成时都执行,这里判断是否为恢复模式
private void CheckForResetNavigation(object sender, NavigationEventArgs e)
{
	//当前为程序快速恢复到最后浏览页面时,这之后框架将进行自动跳转到程序默认启动页或ShellTile指定页
	if (e.NavigationMode == NavigationMode.Reset)
	{
		//快速恢复时,决定是否取消框架的自动跳转
		RootFrame.Navigating += HandlerFotResetNavigating;
		_isResume = true;
	}
	else
	{
		if (_isResume && e.NavigationMode == NavigationMode.Refresh) //第二次点击相同磁贴而触发的快速恢复时,不会执行框架自动跳转
		{
			RootFrame.Navigating -= HandlerFotResetNavigating;
			_isResume = false;
		}
	}
}


3、实现HandlerFotResetNavigating事件:

//快速恢复模式时的框架自动跳转,这里决定是否取消该跳转
private void HandlerFotResetNavigating(object sender, NavigatingCancelEventArgs e)
{
	RootFrame.Navigating -= HandlerFotResetNavigating;
	if (e.Uri.OriginalString.Contains("MainPage.xaml")) //点击程序主磁贴或程序列表图标进入,会跳转到默认程序启动页面,则取消该跳转,恢复到历史页面堆栈最新页面
	{
		e.Cancel = true;
	}
	else //点击ShellTile进入,会跳转ShellTile指定的页面,则不取消该跳转,并且在跳转完成后清除历史堆栈
	{
		RootFrame.Navigated += ClearBackStackAfterReset;
	}
	_isResume = false;
}



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值