程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> Windows 8 動手實驗教程 實驗5:進程生命周期管理

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

編輯:關於.NET

動手實驗

實驗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();

}

查看本欄目

所有這些工作的結果是您可以免費獲得很多東西。如果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應用商店應用,為進程生命周期管理處理Suspend和Resume事件是必須的。在Contoso Cookbook實驗中我們不需要為此做很多工作,因為我們需要保存的所有內容就是導航歷史。在您的應用程序中,可能需要做一些額外的工作。本實驗向您介紹了Visual Studio生成的代碼以及進程生命周期的基礎設施。對於Contoso Cookbook還有很多工作需要完成。下一個實驗將向您展示如何使用設置超級按鈕保存用戶首選項。讓我們繼續前行。

作者:cnblogs zigzagPath

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved