Windows Phone 8 Fast Resume 快速恢复浅析(二)
2013-01-30 15:44
190 查看
承接上文继续讲解WP8 Fast Resume的实现
(二)存在Second Tile 的情况
我们先定义我们的程序结构如下:
![](http://images.cnitblog.com/blog/153665/201301/30154352-a3b66f1310fe417b8cb0bf1f1eafb49f.png)
导航关系为:
MainPage->Page1->Page2
MainPage可以将Page2 Pin到桌面,如此在桌面上存在两个程序入口:
1、主图标,点击后启动客户端进入MainPage
2、第二图标,点击后会直接进入Page2
上述这种场景在多数程序中会存在,对于这种情况,如果需要启动Fast Resume 功能,之前的处理会存在问题
当用户浏览到Page1然后按Home切出,再次点击第二图标时,程序会取消到Page2的导航回到Page1,这在逻辑上是不正确的,所以我们需要额外的操作。
解决思路:
程序需要检测启动的入口,并且根据入口来判断是否来自第二图标,如果是,那么我们需要导航到Page2,并且清空回退栈
具体代码实现:
首先在InitializePhoneApplication的函数里面添加Navigated事件的处理函数(WP8的默认项目模版已经包含下面这端代码。
![](http://images.cnitblog.com/blog/153665/201301/30154353-6acab37f7ba94a15bd39d27604421522.png)
下面我们看下这个事件处理的具体代码:
![](http://images.cnitblog.com/blog/153665/201301/30154354-7b70c1d6bd2d4c2cb348a6b7da104597.png)
故名思议,这个函数将会检查当前的NavigationMode是否为Reset,如果是则添加另一个Navigated事件处理(前面提到如果程序开启了Fast Resume 那么中途切出程序再进入,会触发两次导航,一次为Reset类型,一次为New类型)上面的代码的目的是在第一次类型为Reset的导航结束后添加Navigated事件处理函数,处理函数会在下一次为New的类型导航完成后触发。
![](http://images.cnitblog.com/blog/153665/201301/30154355-80bea2c746f7488daf60f0b20d80dbd3.png)
当第二次导航结束后会清空回退栈。
那么我们再看下Navigating操作:
![](http://images.cnitblog.com/blog/153665/201301/30154355-fde1349a6ba74c1287b43f608c5f0257.png)
代码很简单,当发现是从SecondTile进入时(deeplink)不做任何处理,而非Deeplink入口则取消第二次导航,用下图来直观的展现
第一种情况,程序会取消第二次导航(类型为New的导航),并且不清除回退栈:
![](http://images.cnitblog.com/blog/153665/201301/30154356-3068178a9d9c48df942d35f8dbf182c9.png)
第二种情况,程序不取消第二次导航(类型为New的导航),清除回退栈:
![](http://images.cnitblog.com/blog/153665/201301/30154356-099ecde414a74fd3a04e8cf10d65674e.png)
以上就是程序存在deeplink入口的情况下Fast Resume需要做的处理,整体思路还是比较清晰的。
如果有任何不清楚的地方欢迎留言
另外WP8开发交流群:QQ:182659848 欢迎加入一起讨论
(二)存在Second Tile 的情况
我们先定义我们的程序结构如下:
![](http://images.cnitblog.com/blog/153665/201301/30154352-a3b66f1310fe417b8cb0bf1f1eafb49f.png)
导航关系为:
MainPage->Page1->Page2
MainPage可以将Page2 Pin到桌面,如此在桌面上存在两个程序入口:
1、主图标,点击后启动客户端进入MainPage
2、第二图标,点击后会直接进入Page2
上述这种场景在多数程序中会存在,对于这种情况,如果需要启动Fast Resume 功能,之前的处理会存在问题
当用户浏览到Page1然后按Home切出,再次点击第二图标时,程序会取消到Page2的导航回到Page1,这在逻辑上是不正确的,所以我们需要额外的操作。
解决思路:
程序需要检测启动的入口,并且根据入口来判断是否来自第二图标,如果是,那么我们需要导航到Page2,并且清空回退栈
具体代码实现:
首先在InitializePhoneApplication的函数里面添加Navigated事件的处理函数(WP8的默认项目模版已经包含下面这端代码。
![](http://images.cnitblog.com/blog/153665/201301/30154353-6acab37f7ba94a15bd39d27604421522.png)
下面我们看下这个事件处理的具体代码:
![](http://images.cnitblog.com/blog/153665/201301/30154354-7b70c1d6bd2d4c2cb348a6b7da104597.png)
故名思议,这个函数将会检查当前的NavigationMode是否为Reset,如果是则添加另一个Navigated事件处理(前面提到如果程序开启了Fast Resume 那么中途切出程序再进入,会触发两次导航,一次为Reset类型,一次为New类型)上面的代码的目的是在第一次类型为Reset的导航结束后添加Navigated事件处理函数,处理函数会在下一次为New的类型导航完成后触发。
![](http://images.cnitblog.com/blog/153665/201301/30154355-80bea2c746f7488daf60f0b20d80dbd3.png)
当第二次导航结束后会清空回退栈。
那么我们再看下Navigating操作:
![](http://images.cnitblog.com/blog/153665/201301/30154355-fde1349a6ba74c1287b43f608c5f0257.png)
代码很简单,当发现是从SecondTile进入时(deeplink)不做任何处理,而非Deeplink入口则取消第二次导航,用下图来直观的展现
第一种情况,程序会取消第二次导航(类型为New的导航),并且不清除回退栈:
![](http://images.cnitblog.com/blog/153665/201301/30154356-3068178a9d9c48df942d35f8dbf182c9.png)
第二种情况,程序不取消第二次导航(类型为New的导航),清除回退栈:
![](http://images.cnitblog.com/blog/153665/201301/30154356-099ecde414a74fd3a04e8cf10d65674e.png)
以上就是程序存在deeplink入口的情况下Fast Resume需要做的处理,整体思路还是比较清晰的。
如果有任何不清楚的地方欢迎留言
另外WP8开发交流群:QQ:182659848 欢迎加入一起讨论
相关文章推荐
- Windows phone 8 Fast Resume 快速恢复浅析(一)
- Windows phone 8 Fast Resume 快速恢复浅析(一)
- windows phone Fast Resume 快速恢复
- 与众不同 windows phone (47) - 8.0 其它: 锁屏信息和锁屏背景, 电池状态, 多分辨率, 商店, 内置协议, 快速恢复
- 与众不同 windows phone (47) - 8.0 其它: 锁屏信息和锁屏背景, 电池状态, 多分辨率, 商店, 内置协议, 快速恢复
- Fast Radial Symmetry Transform/快速径向对称变换
- CYQ.Data V4.5.5 版本发布[顺带开源Emit编写的快速反射转实体类FastToT类]
- Silverlgiht:快速去除/恢复对象的颜色
- 隐含语义索引——快速教程(Latent Semantic Indexing(LSI)---A Fast Track Turorial)
- C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 所有的基础数据都可以恢复删除
- 关于快速报错fail-fast想说的之fail-fast的避免方法(二)
- RMAN快速恢复数据库
- RMAN异机恢复快速参考
- Windows Phone 7 处理休眠和墓碑的恢复
- 快速恢复区
- 不停止主数据库操作,只操作从数据库,实现快速恢复的方法和局限性
- Mac OS X(C0,C1):禁止快速切换用户Fast user Switching
- windows phone:Expression Blend实例中文教程(6) - 项目控件和用户交互控件快速入门
- 节后白领无心工作 专家教你快速恢复