Windows 8 動手實驗系列教程 實驗5:進程生命週期管理

動手實驗

實驗5:進程生命週期管理

 

 

2012年9月緩存

簡介

進程生命週期管理對構建Windows應用商店應用的開發者來講是須要理解的最重要的概念之一。不一樣於傳統的Windows應用(它們即便在後臺仍然繼續執行),Windows應用商店應用僅在前臺時執行。一般不可見的應用程序被操做系統掛起而且不能被執行直到操做系統將它恢復到前臺。session

當應用程序被掛起,它仍然在內存中,同時它的全部線程被掛起。只要進程仍然在內存中,當應用程序回到前臺時,它將從中止的地方繼續執行。要作到這一點開發者不須要作任何工做。然而您不能被保證進程一直在內存中。若是當應用程序被掛起時,Windows內核決定須要掛起應用程序所使用的內存,Windows能夠終止掛起的應用程序。當應用程序被終止時,全部未保存的狀態將被丟失。除非您採起步驟以保持狀態,不然當用戶返回應用程序並發現全部已完成的工做被丟失時將會很是吃驚。併發

顯然咱們不會容許它發生。當應用程序被掛起時,即便Windows也不知道應用程序是否最終將被終止。您應當假定應用程序將被終止,所以您必須編寫代碼以在它被掛起時保存應用程序的狀態。而後若是您檢測到應用程序被掛起時有一個終止發生,您能夠在從新激活時恢復狀態。app

聽起來很麻煩?有時是,可是對大多數應用程序來講不是,而且這是您編寫優秀應用程序必須作的工做。不作上述工做的潛在代價是僅僅切換到另外一個應用程序就會丟失他或她在您應用程序中所作的全部工做。async

目標

本實驗將向您介紹進程生命週期管理並向您展現Visual Studio在缺省模版中爲您編寫的一些代碼。由於Contoso食譜是一個簡單的應用程序,因此咱們不須要編寫新的代碼來處理進程生命週期管理,Visual Studio注入的代碼已經足夠。您可能必須爲本身的應用程序編寫更多的代碼,所以咱們將告訴您代碼的位置以及您可使用哪些應用程序接口(API)。中止打字並坐下來休息一下,可是請務必集中注意力。函數

 

 

系統要求

您須要下列軟件完成本實驗:工具

  • Microsoft Windows 8
  • Microsoft Visual Studio 2012

 

設置

您必須執行如下步驟來準備本實驗的計算機:測試

  1. 安裝Microsoft Windows 8。
  2. 安裝Microsoft Visual Studio 2012。

 

練習

本動手實驗包含如下練習:spa

  1. 導航狀態已經被保存
  2. 提示

 

練習1:導航狀態已經被保存

由於在Contoso Cookbook中惟一須要保存的狀態是導航狀態(即用戶查看的項或組以及導航歷史),您不須要爲處理進程生命週期管理作任何工做。Visual Studio在您的應用程序中包含一個名稱爲SuspensionManager的類,它位於項目Common文件夾的SuspensionManager.cs中。Visual Studio同時在App.xaml.cs中的App構造函數中包含一行代碼,它爲Suspending事件註冊了一個事件處理程序。如此處所示,處理程序OnSuspending調用SuspensionManager.SaveAsync以保存應用程序的導航狀態。操作系統

private async void OnSuspending(object sender, SuspendingEventArgs e)
{
    var deferral = e.SuspendingOperation.GetDeferral();
    await SuspensionManager.SaveAsync();
    deferral.Complete();
}

 

Visual Studio在App.xaml.cs文件的OnLaunched事件中包含一個if子句,它的做用是若是應用程序在被掛起後被操做系統終止,則恢復應用程序的導航狀態。

if (args.PreviousExecutionState == ApplicationExecutionState.Terminated)
{
    // Restore the saved session state only when appropriate
    await SuspensionManager.RestoreAsync();
}

 

全部這些工做的結果是您能夠免費得到不少東西。若是Contoso Cookbook被掛起並終止,當再次被啓動時,它將自動轉至您最後查看的頁面。您能夠經過按F5從Visual Studio運行應用程序,選擇某個食譜並今後處所示的Debug Location調試位置)工具欄選擇Suspend and shutdown掛起並關閉)以對其進行測試。

在以這種方式關閉應用程序後按F5以從新啓動應用程序。以上操做對由操做系統終止並從新啓動應用程序的過程進行了模擬。得益於Visual Studio建立的代碼,應用程序將返回您關閉應用程序時查看的食譜。由於導航歷史也被恢復,您甚至可使用返回按鈕回溯您在應用中的步驟。

 

練習2:提示

咱們強烈建議您熟悉Visual Studio中的Suspend(掛起), Resume(繼續), 和Suspend and shutdown(掛起並關閉)命令。這是調試應用程序進程生命週期管理狀態的很好的方法。若是您僅僅經過啓動應用程序並切換任務以使應用程序進入或退出前臺的方法調試進程生命週期管理,大多數時候都能獲得預想的結果。可是對於終止您將不能看到正確的行爲。您將看到應用程序停留在內存的時間比預想的要長,由於Visual Studio調試器進行了一些處理以保持與應用程序的鏈接。對終止事件請使用Visual Studio中的Suspend and shutdown 命令。

決定進程生命週期管理須要保存的內容一樣十分重要。在下一個實驗中咱們將討論設置(或稱爲用戶首選項)而且您將注意到當用戶輸入或修改設置時咱們將馬上保存它們。爲進程生命週期管理保存的狀態應該是一個幫助您恢復用戶至應用程序掛起前位置的「瞬時」狀態。其餘任何須要保存的內容(例如設置或緩存)應該根據須要越早保存越好。這種作法將減小在進程生命週期管理的掛起事件中您須要完成的工做量。

總結

對於優秀的Windows應用商店應用,爲進程生命週期管理處理SuspendResume事件是必須的。在Contoso Cookbook實驗中咱們不須要爲此作不少工做,由於咱們須要保存的全部內容就是導航歷史。在您的應用程序中,可能須要作一些額外的工做。本實驗向您介紹了Visual Studio生成的代碼以及進程生命週期的基礎設施。對於Contoso Cookbook還有不少工做須要完成。下一個實驗將向您展現如何使用設置超級按鈕保存用戶首選項。讓咱們繼續前行。

相關文章
相關標籤/搜索