Windows Phone 執行模型概述

  Windows Phone 執行模型控制在 Windows Phone 上運行的應用程序的生命週期,該過程從啓動應用程序開始,直至應用程序終止。shell

  該執行模型旨在始終爲最終用戶提供快速響應的體驗。爲此,在任何給定時間內,Windows Phone 僅容許一個應用程序在前臺運行。當應用程序再也不運行於前臺時,操做系統將使應用程序進入休眠狀態。若是可用於前臺應用程序的設備內存不足,沒法提供出色的用戶體驗,則操做系統將開始終止休眠的應用程序(首先終止最先使用的應用程序)。應用程序可使用爲其提供的編程框架在取消激活和從新激活時管理其狀態。這有助於建立一種在用戶看來應用程序保持單一實例的用戶體驗,即便應用程序已終止或已從新激活。編程

  該執行模型還爲用戶提供了應用程序間一致的導航體驗。在 Windows Phone 中,用戶可經過從已安裝程序列表或從「開始」中的磁貼啓動應用程序來向前導航,除此以外,還能夠經過其餘方式向前導航,如點按與應用程序相關的 Toast 通知。用戶還可使用硬件「返回」按鈕向後導航各個運行應用程序的頁面,或者向後導航先前運行的應用程序的堆棧。Windows Phone 7.5 添加了經過按住硬件「返回」按鈕來切換到先前運行的應用程序的功能。windows

 

  Windows Phone 應用程序生命週期網絡

  下圖演示了 Windows Phone 應用程序的生命週期。在該圖中,圓圈表示應用程序的狀態。矩形顯示應用程序應管理其狀態的應用程序級別或頁面級別的事件。app

    

 

         

  Launching 事件

  launchings事件在用戶從已安裝程序列表或從「開始」中的磁貼或經過其餘方式(如點按與應用程序相關的 Toast 通知或從「Photos Extras」菜單中選擇應用程序)啓動新的應用程序實例時引起。當以此方式啓動應用程序時,它應向用戶顯示新實例,而不是先前實例的延續。爲了幫助確保應用程序快速加載,應在該事件的處理程序中執行儘量少的代碼。特別是,避免文件和網絡操做等資源密集型任務。您應在應用程序加載以後,在後臺線程中執行這些任務以便實現最佳的用戶體驗。框架

  運行

  啓動以後,應用程序處於運行狀態。在用戶向前導航、離開應用程序或向後導航到第一個應用程序頁面以前,應用程序程序將持續運行。Windows Phone 應用程序不該爲用戶提供退出應用程序的機制。當手機的鎖定屏幕功能啓動時,應用程序將保持運行狀態,除非您已禁用應用程序空閒檢測。有關更多信息,請參閱 Windows Phone 空閒檢測spa

  OnNavigatedFrom 方法

  當用戶導航離開應用程序頁面時,將會調用 OnNavigatedFrom(NavigationEventArgs) 方法。這多是由應用程序中的普通頁面導航致使。當取消激活應用程序時也會調用該方法,下一節將對此進行討論。每當調用該方法時,應用程序都應存儲頁面的狀態,以便在用戶返回到頁面時能夠還原應用程序。向後導航除外。可使用 NavigationMode 屬性來肯定導航是否爲向後導航,若爲向後導航,則無需保存狀態,由於頁面將在下次訪問時從新。在某些狀況下,您可能但願將狀態同時保存在 OnNavigatingFrom(NavigatingCancelEventArgs) 方法中。尤爲是在存儲 MediaElement 控件的狀態時,您將須要執行此操做。操作系統

  Deactivated 事件

  當用戶向前導航、導航出您的應用程序、按「開始」按鈕或啓動其餘應用程序時,都將會引起 Deactivated 事件。若是您的應用程序啓動選擇器,也會引起 Deactivated 事件。有關選擇器的更多信息,請參閱 Windows Phone 啓動器和選擇器概述。當設備的鎖定屏幕功能啓動時,也會引起該事件,除非已禁用應用程序空閒檢測。線程

  在 Deactivated 事件的處理程序中,您的應用程序應保存任何應用程序狀態,以便未來還原。Windows Phone 應用程序隨 State 對象一塊兒提供,後者是能夠用來存儲應用程序狀態的字典。若是應用程序在被邏輯刪除後從新激活,則將使用您保存在 Deactivated 中的數據填充該狀態字典。因爲內存中存在該數據,您能夠用它來還原狀態,而無需資源密集型的文件操做。對象

  在調用 Deactivated 後,應用程序可能會被徹底終止。當應用程序終止時,其狀態將不保留。所以,還應在 Deactivated 事件期間,將應用程序實例間應保留的全部未保存狀態存儲到獨立存儲中。

  休眠

  當用戶向前導航或導航出應用程序時,引起 Deactivated 事件後,操做系統將嘗試使應用程序置於休眠狀態。在此狀態下,應用程序的全部線程均將中止,而且不進行任何處理操做,但應用程序仍無缺地保留在內存中。若是從該狀態中從新激活應用程序,應用程序無需從新建立任何狀態,由於狀態已保留。

  若是在應用程序進入休眠狀態後啓動新的應用程序,這些應用程序須要更多的內存才能提供出色的用戶體驗,操做系統將開始邏輯刪除休眠的應用程序以釋放內存。

  已邏輯刪除

  邏輯刪除的應用程序已終止,但該應用程序的導航狀態相關信息和 Deactivated 期間由應用程序填充的狀態字典將保留下來。設備每次最多可維護五個應用程序的邏輯刪除信息。若是在邏輯刪除應用程序以後,用戶向後導航至應用程序,則應用程序將會從新啓動並使用保留的數據還原狀態。不然,將只是終止應用程序。

  Activated 事件

  當用戶返回到休眠或邏輯刪除的應用程序時,將調用 Activated 事件。應用程序應檢查事件參數的 IsApplicationInstancePreserved 屬性,以肯定應用程序是從休眠狀態返回,仍是從邏輯刪除狀態返回。若是IsApplicationInstancePreserved 爲 true,則應用程序以前處於休眠狀態,狀態已由操做系統自動保留。若爲 false,則應用程序以前已被邏輯刪除,應用程序應使用狀態字典來還原應用程序狀態。在執行 Activated 事件處理程序期間,應用程序不該執行資源密集型任務(例如,從獨立存儲或網絡資源加載內容),由於這會增長應用程序恢復所用的時間。而是應在加載應用程序以後,在後臺線程中執行這些操做。

  OnNavigatedTo 方法

  當用戶導航到頁面時,即會調用 OnNavigatedTo(NavigationEventArgs) 方法。這包括當應用程序第一次啓動時、用戶在應用程序的頁面之間進行導航時以及在應用程序休眠或被邏輯刪除後從新啓動時。在此方法中,應用程序應檢查是否頁面爲新實例。若不是新實例,則無需還原。若頁面爲新實例,而且在頁面的狀態字典中存在數據,則應使用該數據來還原頁面 UI 的狀態。

  Closing 事件

  當用戶向後導航到應用程序的第一頁時,即會引起 Closing 事件。在這種狀況下,應用程序將終止,而且不會保存狀態。在 Closing 事件處理程序中,您的應用程序能夠保存應跨實例保留的數據。應用程序完成全部應用程序和頁面導航事件的時間被限定爲 10 秒。若超出此限度,則應用程序將終止。所以,最好保存整個應用程序生存期的持續狀態,避免在 Closing 事件處理程序中執行大量的文件 I/O 操做。

 

    執行模型事件和應用程序操做摘要

  下表是應用程序生命週期內所發生事件和應用程序應針對每一個事件執行的操做的簡短摘要。

 

事件或方法

應用程序操做

Launching 事件

執行很是少許的代碼。不要執行資源密集型操做,例如,訪問獨立存儲。

OnNavigatedFrom 方法

若是不是向後導航,則將 UI 狀態保存到 State 字典。

Deactivated 事件

當應用程序被邏輯刪除時,將應用程序狀態保存到 State。同時,在應用程序終止時,將持續狀態保存到獨立存儲。當應用程序進入休眠狀態時,不要銷燬內存中應用程序的狀態。

Activated 事件

檢查 IsApplicationInstancePreserved。若爲 true,則不執行任何操做。若爲 false,則使用 State 中的數據還原應用程序狀態。

OnNavigatedTo 方法

檢查頁面是否爲新實例。若不是,則狀態自動保持。不然,若是 State 中存在數據,則使用該數據還原 UI。

Closing 事件

將持續應用程序數據保存到獨立存儲。

警告說明警告:

經過本節所述的事件,您能夠在應用程序進入和離開前臺時保存和還原狀態。可是,推薦的作法是在狀態數據發生更改時當即保存狀態數據。例如,當收到來自網絡的某個 Web 請求時,能夠當即將其結果保存到磁盤和/或應用程序狀態字典中。您不該等到 Deactivated 事件發生後才存儲此數據。請記住,全部應用程序生命週期事件都強制限定應用程序在 10 秒鐘的時間內完成全部任務。

相關文章
相關標籤/搜索