Windows 8 帶來了一種新的應用程序生命周期模型,其中 Windows 商店應用程序會為用戶自動管理。即使它們從未運行過,也沒有顯示在屏幕上,這些應用程序仍然是激活狀態的。這對能量消耗和電池壽命來說有好處。下圖是Windows 商店應用程序的生命周期模型圖。
在這篇文章中,我們一起看看Visual Studio 2012在針對Windows 商店應用程序生命周期特點,所作出的調試改進,包括從JavaScript 調試,到Windows 8 模擬器,到Windows RT 設備上的遠程調試。
模擬事件
在此過程中,我們遇到的第一個挑戰是如何來模擬你的應用程序在現實世界使用中會遇到的事件,以便你可以調試這些有趣的情況。如何模擬應用程序被激活、被暫停以及被終止?
為了確保以上事件都可以簡單方便的對應到Visual Studio中,Visual Studio中添加了以下三個命令:Suspend(暫停)、Resume( 繼續)和" Suspend and Shutdown(暫停和關閉)"。
- 暫停:在應用程序處理事件之后,暫停命令讓應用程序處於暫停狀態。
- 繼續:繼續運行應用程序,使其重新進入運行狀態,並將它作為在前台活動的應用程序。
- 暫停和關閉:"暫停和關閉"首先會"暫停"。然后終止應用程序,並停止調試。
你一定和我想的一樣:為什么需要創建一個"暫停和關閉"的命令呢?此命令的目的是模擬當你的應用程序由Windows 8暫停和終止時,發生的自然順序事件。例如,當你通過停止調試,來關閉應用程序,這時不會觸發暫停事件。當你通過按 Alt + F4 或將其拖動到屏幕的底部來顯式地關閉該程序。在這種情況下,在終止該應用程序之前,會觸發一個暫停事件;但下一次用戶激活該應用程序時,其PreviousExecutionState將是ClosedByUser (這不是VS2012試圖模擬的).因此,"暫停和關閉"命令用來模擬應用程序被Windows暫停和終止,而不是由用戶顯式地關閉。
命令
在 Visual Studio 2012中,程序運行后工具欄中出現下拉Combo選擇框,這些命令按鈕在下拉列表中:
請注意"調試位置"工具欄不是總是被啟用的。因此,如果你看不到此工具欄,請通過視圖菜單啟用它:
應用程序激活
在調試器中,我們可以模擬應用程序激活。
當你開始在 Visual Studio中調試Metro樣式應用程序時,默認情況下,應用程序自動被激活。(這與磁片激活非常類似。)
不過,還有一些其他方式。例如,你的應用程序可以接收與另一個應用程序共享的某些內容,並通過協議或擴展激活。(有關其工作原理的更多信息,請參閱共享內容目標應用程序示例。)
Visual Studio 2012 中提供了功能來讓你在某應用啟動時自動進入調試狀態,但是VS本身不會自動啟動它(為了模擬這些其他激活的方案)。
當你設置此選項,啟動調試你的項目時,Visual Studio 2012 將進入調試模式,但實際上沒有運行任何東西。你還會注意到"調試位置"工具欄上顯示了你的項目名稱,而不是顯示正在運行的進程。
這表明由該項目部署的應用程序軟件包是在調試模式下,一旦該軟件包的應用程序被激活了,調試器就會附加到進程中。
我們可以模擬與另一個應用程序共享文本,並選擇示例應用程序作為共享目標。在這種情況下,應用程序被激活了,我們可以調試它。請注意,現在"調試位置"工具欄顯示正在運行的實際進程(而不是之前的項目名稱)。
調試后台任務
調試器可以模擬另一個 Windows 8 行為,這就是后台任務。后台任務是你的應用程序可能需要在后台執行某些操作,雖然這類應用程序不在屏幕上,也沒有運行。
后台任務是由像計時器事件這樣的系統事件所觸發的。(你的應用程序至少需要運行一次來注冊任務)。后台任務在提供寄宿的系統中正常運行,但是,你也可以為一些后台任務觸發器提供你自己的可執行文件。無論哪個進程承載該任務,后台任務都作為你的軟件包的一部分運行。
當你的軟件在調試模式下時,一旦開始之后,調試器會自動附加到承載進程中。
假設,你可以在某一時間調試來自多個軟件包的應用程序,我們需要在一個控件中展示這些,而且這個控件能夠基於任務的數量而擴展。因此,VS2012添加這些到上圖所示的同一"調試位置"工具欄下拉列表中。其結果是,為當前活動狀態的軟件包而注冊的所有后台任務的觸發器命令都將出現在此下拉列表中。作為一個例子,當調試后台任務示例時,注冊之后,你將在下拉列表中看到以下后台任務。
下一步,若要調試后台任務,添加一個斷點到OnNavigatedTo方法中,然后觸發后台任務:
看到了吧,調試后台任務就這么簡單 !