承接上文繼續講解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 歡迎加入一起討論