Windows Phone 7應用程式的運作中有4項事件需要開發者處理,以保證應用應用程式在整個生命周期中一緻的使用者體驗。這四個事件是Launching(啟動),Closing(結束),Deactivated(暫停),Activated(激活)。他們都是PhoneApplicationService類的成員。
<b>Launching</b><b>(啟動)</b>
當使用者單擊手機應用清單裡的應用圖示,或者單擊開始頁面裡的應用程式方磚圖示,一個應用程式就被啟動了。或者當使用者單擊螢幕上方的彈出式通知條時,發出該通知的應用程式也會被啟動。無論使用者使用上述何種方式啟動應用程式,作業系統在建立應用程式執行個體的同時都會觸發Launching事件。
處理Launching事件時,開發者不應該從獨立外存讀取所有永久資料,否則會讓使用者不滿,因為系統在處理完這個事件之後才在螢幕上顯示應用程式首頁,而且裝載永久資料耗費時間較長。合理的方法是在應用程式啟動時隻讀取顯示首頁用到的永久資料,待應用程式啟動後以異步方式裝載其他永久資料。
處理Launching事件時,開發者不應該恢複應用程式過去執行個體的瞬時狀态。每應用程式一旦被啟動,使用者的體驗應該是一個從頭開始的執行個體。
當Launching事件被處理後,應用程式進入運作狀态。開發者應該在應用程式的執行中抓住恰當時機,以增量方式進行存取永久資料,以便改善使用者體驗。即使永久資料量很小,應用程式也應該盡量避免在其系統狀态改變時一次性集中存取永久資料。<b></b>
<b>Closing</b><b>(結束)</b><b></b>
運作中的應用程式可能觸發什麼事件完全由使用者的操作決定。一旦使用者單擊退回鍵若幹次,并翻過了應用程式的首頁,Closing事件就被觸發,此時應用程式将被終止。
處理Closing事件時,開發者應該把所有的永久資料儲存到獨立外存。
處理Closing事件時,開發者沒有必要儲存目前執行個體的瞬間狀态,也就是那些隻和本次運作相關的資訊。因為當使用者再次啟動應用程式并打開首頁時,他體驗到的應該是一個從新運作的執行個體。
<b>Deactivated</b><b>(暫停)</b><b></b>
運作中的應用程式一旦被另一個應用程式替代并退出系統前台,Deactivated事件就被觸發,此時應用程式被暫停。多種操作能夠引起應用程式暫停。當使用者單擊開始鍵,或當使用者使用啟動器和選擇器和系統幫助,或當使用者長時間沒有操作,手機逾時自動鎖屏都會使目前應用程式被暫停。不同于Closing事件所對應的應用程式被完全終止,Deactivated事件所對應的應用程式被系統雪藏。這意味着雖然應用程式不再運作,但是其運作狀态被作業系統完全儲存。這樣就使使用者可以傳回一個被雪藏的應用程式,而且傳回時的狀态跟雪藏前完全一樣,就像應用程式根本沒有暫停過一樣。
處理Deactivated事件時,開發者應該将應用程式的目前瞬間狀态完全儲存到PhoneApplicationService類的State屬性裡。在必要時恢複這些瞬間狀态,應用程式就能從雪藏狀态複蘇。
處理Deactivated事件時,開發者應該将應用程式的永久使用者資料儲存到獨立外存。否則當被暫停的應用程式不再被激活而被重新啟動時,永久資料會被丢失。
處理Deactivated事件的所有操作必須在10秒鐘内完成,否則作業系統會終止應用程式。由于這個緣故,對于存取大量永久資料的應用程式,開發者必須在運作過程中随時對其進行增量儲存。
處理Deactivated事件時,開發者不應該對應用程式做任何破壞性操作,因為一個被暫停的應用程式随時可能在雪藏過程中就複蘇了,比如使用者快速地連續單擊開始和退回鍵。
<b>Activated</b><b>(激活)</b><b></b>
當一個應用程式被暫停和雪藏後,這個應用程式可能再也不被激活。這可能是因為使用者從首頁啟動一個應用程式的新執行個體,也可能因為使用者又啟動和雪藏了過多的其他應用程式,以至最早被雪藏的應用程式超過了應用程式堆棧的容量極限而被丢失。
通常情況下,一個應用程式被暫停和雪藏後需要被再次激活。使用者可多次單擊退回鍵回到雪藏的應用程式。當造成應用程式暫停的啟動器和選擇器運作完畢,或者被使用者取消,使用者也會回到雪藏的應用程式。當使用者傳回雪藏的應用程式,這個應用程式就被激活了,Activated事件将會被觸發。
處理Activated事件時,開發者應該從PhoneApplicationService類的State屬性中讀取程式雪藏前的瞬間狀态資訊,進而完全恢複到雪藏前的狀态。
處理Activated事件時,開發者不應該從獨立外存讀取所有永久資料。這和處理Launching事件時不應該存取永久資料是一個道理,目的是避免讓使用者長時間等待應用程式啟動。