(一) Windows phone執行模型:
主旨:始終為終端使用者提供快速響應的體驗
特點:在任何給定時間內,Windows Phone 僅允許一個應用程式在前台運行。當應用程式不再運行於前台時,作業系統將使應用程式進入休眠狀態
處理的原則:如果可用於前台應用程式的裝置記憶體不足,無法提供出色的使用者體驗,則作業系統將開始終止休眠的應用程式(首先終止最早使用的應用程式)
(二) 基本概念:
應用程式狀態:由應用程式中的多個頁面使用的資料
頁面狀態:單個應用程式頁面的當前可視狀態
應用程式事件:【可以理解為Android應用程式中的生命週期函數】。在這裡有四個,分別是:Launching、Deactivated、Activated 和 Closing。這些事件的處理是包含在Application對象中的【該對象是
Windows Phone 應用程式的 Visual Studio 項目模板的一部分。您將在這些事件處理常式中編寫代碼來管理應用程式狀態】。
特別注意的是:所有應用程式事件都限定應用程式在 10 秒鐘的時間內完成事件處理常式中的任務。如果某個應用程式超出此限制,則會立即將其終止。因此,您應當避免執行資源密集型任務,如在應用程式事件的處理常式內從隔離儲存區 (Isolated Storage)中讀取資料和向其中寫入資料。在應用程式運行時,這些任務應儘可能通過後台線程來執行。在應用程式的整個生存期內隨著應用程式資料的更改而儲存應用程式資料,可以減少應用程式事件期間需要執行的狀態管理工作量。
頁面事件:所有 Windows Phone 頁面均繼承自 PhoneApplicationPage 對象,它公開了兩個方法:OnNavigatedTo(NavigationEventArgs) 和 OnNavigatedFrom(NavigationEventArgs),應用程式將重寫這兩個方法以管理頁面狀態。確切的講,這兩個方法是在Page對象中的,而PhoneApplicationPage則是又繼承了Page類。通過提供的API我們可以知道這兩個方法是定位在Page類的。
邏輯刪除:在此過程中,應用程式將終止,但有關應用程式狀態和應用程式中各個頁面的資料將保留下來。儲存的資料包含當前顯示的應用程式頁面和應用程式中之前訪問的頁面的後退堆棧。如果使用者向後導航至邏輯刪除的應用程式,則會重新建立應用程式,並自動還原當前頁面和頁面記錄。在這裡我們就可以用到了上面的兩個頁面事件的函數。這樣的一個功能我將在後面為大家示範一個Demo。
(三) Windows Phone 應用程式的生命週期
用圖說明真相是永遠是最好的方法:
再給出一個Demo吧
我們選擇工程目錄下的App.xaml 可以看到以下的代碼:
<Application.ApplicationLifetimeObjects> <!--處理應用程式的生存期事件所需的對象--> <shell:PhoneApplicationService Launching="Application_Launching" Closing="Application_Closing" Activated="Application_Activated" Deactivated="Application_Deactivated"/> </Application.ApplicationLifetimeObjects>
再開啟“屬性對話方塊”
這裡就有著四個生命週期的四個事件。或者我們也可以直接開啟App.xaml.cs檔案也可以看到這已經寫好的四個生命週期的四個事件函數
給出樣本的原始碼:
// 應用程式啟動(例如,從“開始”菜單啟動)時執行的代碼 // 此代碼在重新啟用應用程式時不執行 privatevoid Application_Launching(object sender, LaunchingEventArgse) { Debug.WriteLine("---------------------Launching-----------------------------"); } // 啟用應用程式(置於前台)時執行的代碼 // 此代碼在初次開機應用程式時不執行 privatevoid Application_Activated(object sender, ActivatedEventArgse) { Debug.WriteLine("---------------------Activated-----------------------------"); } // 停用應用程式(發送到後台)時執行的代碼 // 此代碼在應用程式關閉時不執行 private voidApplication_Deactivated(object sender, DeactivatedEventArgs e) { Debug.WriteLine("---------------------Deactivated-----------------------------"); } // 應用程式關閉(例如,使用者點擊“後退”)時執行的代碼 // 此代碼在停用應用程式時不執行 privatevoid Application_Closing(object sender, ClosingEventArgse) { Debug.WriteLine("---------------------Closing-----------------------------"); }
1、當我們應用程式啟動時我們可以看到的輸出資訊為下面:
2、我們點擊“SearchTask”將啟動一個新的Task這時候我們的應用程式將會被掛起,這就是我們說的墓碑機制也可以說是雪藏。它的狀態是:Deactivated
此時我們看到的輸出資訊為:
3、當我們點擊返回後,我們的應用程式將又變為:Activated
此時我們看到的輸出資訊為:
4、當我們再點出“返回”的時候這就意味著我們退出了這個應用程式,此時我們的應用程式狀態就是Closing。此時我們看到的輸出資訊為:
相信通過上面的一些介紹。大家對這些概念也有所瞭解了吧
(四) 執行模型事件和應用程式操作摘要
再給出微軟官方的建議:
事件或方法 |
應用程式操作 |
Launching 事件 |
執行非常少量的代碼。不要執行資源密集型操作,例如,訪問隔離儲存區 (Isolated Storage)。 |
OnNavigatedFrom 方法 |
如果不是向後導航,則將 UI 狀態儲存到 State 字典。 |
Deactivated 事件 |
當應用程式被邏輯刪除時,將應用程式狀態儲存到 State。同時,在應用程式終止時,將持續狀態儲存到隔離儲存區 (Isolated Storage)。當應用程式進入休眠狀態時,不要銷毀記憶體中應用程式的狀態。 |
Activated 事件 |
檢查 IsApplicationInstancePreserved。若為 true,則不執行任何操作。若為 false,則使用 State 中的資料還原應用程式狀態。 |
OnNavigatedTo 方法 |
檢查頁面是否為新執行個體。若不是,則狀態自動保持。否則,如果 State 中存在資料,則使用該資料還原 UI。 |
Closing 事件 |
將持續應用程式資料儲存到隔離儲存區 (Isolated Storage)。 |
註:本上面所描述的一些基本概念大部分也是摘自微軟官方文檔。
如需轉載引用請註明出處:http://blog.csdn.net/jiahui524