• 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 欢迎加入一起讨论

      

  • 相关阅读:
    10月6日动手动脑
    10月5日
    SQL
    bug 对应
    @OneToMany
    SQL Constraints
    SQL级联删除——删除主表同时删除从表——同时删除具有主外键关系的表
    子父表
    取字符串
    SQL中MAX()
  • 原文地址:https://www.cnblogs.com/tianhonghui/p/2883138.html
Copyright © 2020-2023  润新知