動手實驗
實驗5:進程生命週期管理
2012年9月
簡介
進程生命週期管理對構建Windows市集應用的開發人員來說是需要理解的最重要的概念之一。不同於傳統的Windows應用(它們即使在後台仍然繼續執行),Windows市集應用僅在前台時執行。通常不可見的應用程式被作業系統掛起並且不能被執行直到作業系統將它恢複到前台。
當應用程式被掛起,它仍然在記憶體中,同時它的所有線程被掛起。只要進程仍然在記憶體中,當應用程式回到前台時,它將從停止的地方繼續執行。要做到這一點開發人員不需要做任何工作。然而您不能被保證進程一直在記憶體中。如果當應用程式被掛起時,Windows核心決定需要掛起應用程式所使用的記憶體,Windows可以終止掛起的應用程式。當應用程式被終止時,所有未儲存的狀態將被丟失。除非您採取步驟以保持狀態,否則當使用者返回應用程式並發現所有已完成的工作被丟失時將會非常吃驚。
顯然我們不會允許它發生。當應用程式被掛起時,即使Windows也不知道應用程式是否最終將被終止。您應當假定應用程式將被終止,因此您必須編寫代碼以在它被掛起時儲存應用程式的狀態。然後如果您檢測到應用程式被掛起時有一個終止發生,您可以在重新啟用時恢複狀態。
聽起來很麻煩?有時是,但是對大多數應用程式來說不是,並且這是您編寫優秀應用程式必須做的工作。不做上述工作的潛在代價是僅僅切換到另一個應用程式就會丟失他或她在您應用程式中所做的所有工作。
目標
本實驗將向您介紹進程生命週期管理並向您展示Visual Studio在預設模版中為您編寫的一些代碼。因為Contoso食譜是一個簡單的應用程式,所以我們不需要編寫新的代碼來處理進程生命週期管理,Visual Studio注入的代碼已經足夠。您可能必須為自己的應用程式編寫更多的代碼,因此我們將告訴您代碼的位置以及您可以使用哪些應用程式介面(API)。停止打字並坐下來休息一下,但是請務必集中注意力。
系統要求
您需要下列軟體完成本實驗:
Microsoft Windows 8
Microsoft Visual Studio 2012
設定
您必須執行以下步驟來準備本實驗的電腦:
1.安裝Microsoft Windows 8。
2.安裝Microsoft Visual Studio 2012。
練習
本動手實驗包含以下練習:
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();
}
查看本欄目更多精彩內容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/net/