(一)概述
Windows phone 8 新添加的很重要的一個特性就是 Fast Resume。
這個特性應用的情境如下:
對於wp7而言,使用者瀏覽一段時間app內容後,如果從程式功能表列點擊app表徵圖,那麼程式會重新從Mainpage開始啟動,
而在wp8我們可根據業務需求,重新點擊app表徵圖後,回到之前瀏覽的頁面。
引用madn上的圖片來直觀的說明下:
圖中使用者進入程式後,進入Page1,然後通過Home鍵回到了案頭,這個時候,如果使用者重新點擊程式主表徵圖A,那麼
在WP7系統中會得到如下的結果:
,使用者重新回到了Main Page 之前瀏覽的介面均被清除。
而如果在WP8中如果程式加入了Fast Resume 的特性,那麼使用者會得到如的體驗:
使用者重新回到Page1,在使用者體驗上和使用者點擊Back鍵一致。這種特性在某些方面有利於增加使用者體驗,開發人員因此也有了更多的選擇機會。
(二)如何?
對於實現的問題,我會根據需求情境來具體說明,分我如下兩種種情況:
1.程式不存在SecondTile,也就是使用者只能通過程式AppList和MainTile啟動
2.程式存在SecondTile,一下簡稱deeplink,即使用者可以通過入口直接進入非MainPage介面
(1)最簡單的情境,程式不存在SecondTile
a.原理
1、對於wp程式而言,在執行Navigate的時候會觸發NavigatXXX相關的一系列事件,其中RootFrame的Navigating事件的參數中存在NavigatingCancelEventArgs 類型的參數,我們可以通過此參數中的屬性擷取到本次導航的類型,及要導航到的Uri路徑,並且可以通過設定此參數進行本次導航的取消。
2、在App的WMAppManifest.xml檔案中我們可以設定程式的ActivationPolicy這個參數控製程序是否支援FastResume:
如此設定後,概述中提到的情境,使用者第二次點擊MainTile進入程式會觸發兩次Navigating,一次NavigationModel參數類型為Reset如下:
之後會再次導航,此時NavigationMode為New如下:
b.實現
看到應該已經有思路如何來處理了,我們在修改WMAppManiFest.xml後,需要在app.xaml.cs中做如下改動:
首先中第127行,添加Navigating事件處理函數
在事件處理中操作如下:
上面提到當設定Fast Resume後 進入程式會執行兩次導航,所以需要在第一次類型為Reset的時候記錄下來,當第二次執行New類型的導航時,將本次導航取消,直觀的說明了此函數的處理:
當從MainTile第二次進入時取消到MainPage的導航即可
對於第二種情況存在SecondTile的時候的處理我會在後面繼續更新出來,謝謝支援!
如需demo,請留下郵箱,我會發給你來學習:-)
另外WP8開發交流群:QQ:182659848