Windows Phone 8 Fast Resume 快速恢复浅析(二)

承接上文继续讲解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 欢迎加入一起讨论

  

原文地址:https://www.cnblogs.com/tianhonghui/p/2883138.html