承接上文继续讲解WP8 Fast Resume的实现
(二)存在Second Tile 的情况
我们先定义我们的程序结构如下:
导航关系为:
MainPage->Page1->Page2
MainPage可以将Page2 Pin到桌面,如此在桌面上存在两个程序入口:
1、主图标,点击后启动客户端进入MainPage
2、第二图标,点击后会直接进入Page2
上述这种场景在多数程序中会存在,对于这种情况,如果需要启动Fast Resume 功能,之前的处理会存在问题
当用户浏览到Page1然后按Home切出,再次点击第二图标时,程序会取消到Page2的导航回到Page1,这在逻辑上是不正确的,所以我们需要额外的操作。
解决思路:
程序需要检测启动的入口,并且根据入口来判断是否来自第二图标,如果是,那么我们需要导航到Page2,并且清空回退栈
具体代码实现:
首先在InitializePhoneApplication的函数里面添加Navigated事件的处理函数(WP8的默认项目模版已经包含下面这端代码。
下面我们看下这个事件处理的具体代码:
故名思议,这个函数将会检查当前的NavigationMode是否为Reset,如果是则添加另一个Navigated事件处理(前面提到如果程序开启了Fast Resume 那么中途切出程序再进入,会触发两次导航,一次为Reset类型,一次为New类型)上面的代码的目的是在第一次类型为Reset的导航结束后添加Navigated事件处理函数,处理函数会在下一次为New的类型导航完成后触发。
当第二次导航结束后会清空回退栈。
那么我们再看下Navigating操作:
代码很简单,当发现是从SecondTile进入时(deeplink)不做任何处理,而非Deeplink入口则取消第二次导航,用下图来直观的展现
第一种情况,程序会取消第二次导航(类型为New的导航),并且不清除回退栈:
第二种情况,程序不取消第二次导航(类型为New的导航),清除回退栈:
以上就是程序存在deeplink入口的情况下Fast Resume需要做的处理,整体思路还是比较清晰的。
如果有任何不清楚的地方欢迎留言
另外WP8开发交流群:QQ:182659848 欢迎加入一起讨论