天天看點

Windows phone開發初體驗之-基本概念的了解

Windows phone 開發初體驗之-基本概念的了解 (一)             Windows phone 執行模型: 主旨:

始終為最終使用者提供快速響應的體驗

特點:

在任何給定時間内,Windows Phone 僅允許一個應用程式在前台運作。當應用程式不再運作于前台時,作業系統将使應用程式進入休眠狀态

處理的原則:

如果可用于前台應用程式的裝置記憶體不足,無法提供出色的使用者體驗,則作業系統将開始終止休眠的應用程式(首先終止最早使用的應用程式)  

(二)             基本概念: 應用程式狀态:

由應用程式中的多個頁面使用的資料

頁面狀态:

單個應用程式頁面的目前可視狀态 應用程式事件:【可以了解為Android應用程式中的生命周期函數】。在這裡有四個,分别是:

Launching 、Deactivated、Activated

 和 

Closing

。這些事件的處理是包含在Application對象中的【該對象是 Windows Phone 應用程式的 Visual Studio 項目模闆的一部分。您将在這些事件處理程式中編寫代碼來管理應用程式狀态】。 

特别注意的是

:所有應用程式事件都限定應用程式在 10 秒鐘的時間内完成事件處理程式中的任務。如果某個應用程式超出此限制,則會立即将其終止。是以,您應當避免執行資源密集型任務,如在應用程式事件的處理程式内從獨立存儲中讀取資料和向其中寫入資料。在應用程式運作時,這些任務應盡可能通過背景線程來執行。在應用程式的整個生存期内随着應用程式資料的更改而儲存應用程式資料,可以減少應用程式事件期間需要執行的狀态管理工作量。

頁面事件:

所有 Windows Phone 頁面均繼承自 

PhoneApplicationPage

 對象,它公開了兩個方法: OnNavigatedTo(NavigationEventArgs) 和  OnNavigatedFrom(NavigationEventArgs),應用程式将重寫這兩個方法以管理頁面狀态。确切的講,這兩個方法是在Page對象中的,而PhoneApplicationPage則是又繼承了Page類。通過提供的API我們可以知道這兩個方法是定位在Page類的。

邏輯删除:

在此過程中,應用程式将終止,但有關應用程式狀态和應用程式中各個頁面的資料将保留下來。儲存的資料包含目前顯示的應用程式頁面和應用程式中之前通路的頁面的後退堆棧。如果使用者向後導航至邏輯删除的應用程式,則會重新建立應用程式,并自動還原目前頁面和頁面曆史記錄。在這裡我們就可以用到了上面的兩個頁面事件的函數。這樣的一個功能我将在後面為大家示範一個Demo。  

(三)             Windows Phone 應用程式的生命周期

用圖說明真相是永遠是最好的方法:

Windows phone開發初體驗之-基本概念的了解

  再給出一個Demo吧 我們選擇工程目錄下的App.xaml 可以看到以下的代碼:  <Application.ApplicationLifetimeObjects>         <!--處理應用程式的生存期事件所需的對象-->         <shell:PhoneApplicationService

            Launching="Application_Launching" Closing="Application_Closing"

            Activated="Application_Activated" Deactivated="Application_Deactivated"/>     </Application.ApplicationLifetimeObjects>   再打開“屬性對話框”

Windows phone開發初體驗之-基本概念的了解

這裡就有着四個生命周期的四個事件。或者我們也可以直接打開App.xaml.cs檔案也可以看到這已經寫好的四個生命周期的四個事件函數  

Windows phone開發初體驗之-基本概念的了解

給出示例的源代碼:         // 應用程式啟動(例如,從“開始”菜單啟動)時執行的代碼         // 此代碼在重新激活應用程式時不執行

        private void Application_Launching(object sender, LaunchingEventArgs e)

        {               Debug.WriteLine("---------------------Launching-----------------------------");                    }           // 激活應用程式(置于前台)時執行的代碼         // 此代碼在首次啟動應用程式時不執行

        private void Application_Activated(object sender, ActivatedEventArgs e)

        {             Debug.WriteLine("---------------------Activated-----------------------------");             }           // 停用應用程式(發送到背景)時執行的代碼         // 此代碼在應用程式關閉時不執行

        private void Application_Deactivated(object sender, DeactivatedEventArgs e)

        {             Debug.WriteLine("---------------------Deactivated-----------------------------");             }           // 應用程式關閉(例如,使用者點選“後退”)時執行的代碼         // 此代碼在停用應用程式時不執行

        private void Application_Closing(object sender, ClosingEventArgs e)

        {             Debug.WriteLine("---------------------Closing-----------------------------");                            }   1、當我們應用程式啟動時我們可以看到的輸出資訊為下面:

Windows phone開發初體驗之-基本概念的了解

2、我們點選“SearchTask”将啟動一個新的Task這時候我們的應用程式将會被挂起,這就是我們說的墓碑機制也可以說是雪藏。它的狀态是:Deactivated 此時我們看到的輸出資訊為:

Windows phone開發初體驗之-基本概念的了解

  3、當我們點選傳回後,我們的應用程式将又變為:Activated 此時我們看到的輸出資訊為:

Windows phone開發初體驗之-基本概念的了解

4、當我們再點出“傳回”的時候這就意味着我們退出了這個應用程式,此時我們的應用程式狀态就是Closing。此時我們看到的輸出資訊為:

Windows phone開發初體驗之-基本概念的了解

  相信通過上面的一些介紹。大家對這些概念也有所了解了吧  

(四)             執行模型事件和應用程式操作摘要

再給出微軟官方的建議:

事件或方法 應用程式操作
Launching 事件 執行非常少量的代碼。不要執行資源密集型操作,例如,通路獨立存儲。
OnNavigatedFrom 方法 如果不是向後導航,則将 UI 狀态儲存到  State 字典。
Deactivated 事件 當應用程式被邏輯删除時,将應用程式狀态儲存到  State。同時,在應用程式終止時,将持續狀态儲存到獨立存儲。當應用程式進入休眠狀态時,不要銷毀記憶體中應用程式的狀态。
Activated 事件 檢查  IsApplicationInstancePreserved。若為 true,則不執行任何操作。若為 false,則使用  State 中的資料還原應用程式狀态。
OnNavigatedTo 方法 檢查頁面是否為新執行個體。若不是,則狀态自動保持。否則,如果  State 中存在資料,則使用該資料還原 UI。
Closing 事件 将持續應用程式資料儲存到獨立存儲。

    注:本上面所描述的一些基本概念大部分也是摘自微軟官方文檔。      

轉載于:https://blog.51cto.com/jiahui524/869949

繼續閱讀