(一)概述
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