Windows phone 8 是一個單任務作業系統,任何時候都隻有一個應用處于活躍狀态,這裡的多任務是指對背景任務的支援。本節我們先講講應用程式的運作狀态,然後看看支援的背景任務,包括:背景代理、背景音頻、背景檔案傳輸、背景輔助線程等。
快速導航:
我們通過圖解來分析應用的運作狀态,啟動并置于前台界面的應用是唯一處于運作狀态的,其他的操作,比如win鍵,後退導出應用,打開選擇器和啟動器時都會讓目前運作的應用進入休眠狀态,如果系統記憶體不足,處于休眠狀态的應用可能會被系統邏輯删除。下面的圖示示範了這個過程。

當應用處于休眠狀态時,它的狀态資訊仍然保留在記憶體中,使用者下次切換進去後不會有任何變化。但是當應用被邏輯删除後,這些狀态資訊就會丢失,比如表單填寫的内容都會消失,為了避免這種情況,我們需要手動保留狀态資訊。
首先,我們在mainpage定義一些頁面表單控件:
[XAML]
我們需要實作在應用邏輯删除後能将其狀态保持到頁面的State字典中,但是需要我們的資料源支援序列化,是以我們定義與表單關聯的ViewModel如下:
[C#]
我需要對mainpage代碼添加頁面導航入、導航出的事件。導航出頁面的時候,如果不是向後導航,則存儲狀态。導航入的時候,我們需要判斷頁面是否為邏輯删除後正在恢複的狀态,如果是,則通過狀态字典恢複狀态。mainpage代碼如下:
然後我們添加一page1頁面,該頁添加一個傳回按鈕。用于測試。為了達到調試時即時進入邏輯删除的效果,我們需要設定下。右鍵項目檔案,點屬性,在調試頁籤勾選“在調試期間取消激活時邏輯删除”。
背景代理可以在應用退出以後獨立在系統背景運作,它包含兩種類型的代理,分别是定期代理和資源密集型代理,前者用于頻繁執行小任務,後者用于在系統空閑時執行耗時大任務。要使用背景代理,我們需要添加一個名為Windows phone 計劃任務代理的項目,并在應用的項目中添加對其的引用,現在我們要實作在背景代理中彈出Toast,我們需要如下修改ScheduledAgent.cs的OnInvoke方法,代碼如下
接着,我們在應用項目的mainpage中調用代理,代碼如下:
通過背景音頻的功能我們可以實作在系統背景播放音樂的功能,由于背景音頻代理隻能通路本地檔案夾,是以我們務必要先把需要播放的音樂檔案拷貝到本地檔案夾中。本示例是把安裝檔案夾的音頻檔案拷貝到本地檔案夾,代碼如下:
我們需要在解決方案中添加Windows phone 音頻播放代理項目,并在應用項目中添加對其的引用。修改AudioPlayer.cs代碼如下:
最後,我們在mainpage中添加對播放的控制。
背景檔案傳輸允許我們實作下載下傳上傳檔案的功能,他限制系統中同時運作的傳輸任務不能超過兩個,并且下載下傳的檔案隻能存放在本地檔案夾的/shared/transfers目錄下。下面我們實作一個背景傳輸任務,下載下傳部落格相冊中的一張照片。
背景輔助線程雖然名字這麼叫,但是它不能在背景運作,我們可以用它來執行一個任務,并且可以實時擷取執行的進度,實作代碼如下:
版權聲明:本文的版權歸作者與部落格園共有。轉載時須注明原文出處以及作者,并保留原文指向型連結,不得更改原文内容。否則作者将保留追究其法律責任。
<a href="http://www.cnblogs.com/lipan/archive/2013/05/22/3092266.html">《上一篇:Windows phone 8 學習筆記 圖塊與通知</a>
<a href="http://www.cnblogs.com/lipan/archive/2013/05/29/3106430.html">系列目錄</a>
<a href="http://www.cnblogs.com/lipan/archive/2013/05/27/3101750.html">下一篇:Windows phone 8 學習筆記 裝置》</a>