zoukankan      html  css  js  c++  java
  • 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 欢迎加入一起讨论

      

  • 相关阅读:
    Log4net快速搭建
    WebAPI中Area的使用
    (三)Redis for StackExchange.Redis
    (二)Redis for 阿里云公网连接
    Python+CGI,在Windows上快速部署Python到IIS
    腾讯云
    UIView添加事件
    Sublime Text Packages Control 安装
    乎乎测试
    常用第三方类库
  • 原文地址:https://www.cnblogs.com/tianhonghui/p/2883138.html
Copyright © 2011-2022 走看看