4項事件——Launching,Closing,Deactivated,Activated
Windows Phone 7應(yīng)用程序的運行中有4項事件需要開發(fā)者處理,以保證應(yīng)用應(yīng)用程序在整個生命周期中一致的用戶體驗。這四個事件是Launching(啟動),Closing(結(jié)束),Deactivated(暫停),Activated(激活)。他們都是PhoneApplicationService類的成員。
Launching(啟動)
當(dāng)用戶單擊手機應(yīng)用列表里的應(yīng)用圖標(biāo),或者單擊開始頁面里的應(yīng)用程序方磚圖標(biāo),一個應(yīng)用程序就被啟動了。或者當(dāng)用戶單擊屏幕上方的彈出式通知條時,發(fā)出該通知的應(yīng)用程序也會被啟動。無論用戶使用上述何種方式啟動應(yīng)用程序,操作系統(tǒng)在創(chuàng)建應(yīng)用程序?qū)嵗耐瑫r都會觸發(fā)Launching事件。
處理Launching事件時,開發(fā)者不應(yīng)該從獨立外存讀取所有永久數(shù)據(jù),否則會讓用戶不滿,因為系統(tǒng)在處理完這個事件之后才在屏幕上顯示應(yīng)用程序首頁,而且裝載永久數(shù)據(jù)耗費時間較長。合理的方法是在應(yīng)用程序啟動時只讀取顯示首頁用到的永久數(shù)據(jù),待應(yīng)用程序啟動后以異步方式裝載其他永久數(shù)據(jù)。
處理Launching事件時,開發(fā)者不應(yīng)該恢復(fù)應(yīng)用程序過去實例的瞬時狀態(tài)。每應(yīng)用程序一旦被啟動,用戶的體驗應(yīng)該是一個從頭開始的實例。
當(dāng)Launching事件被處理后,應(yīng)用程序進(jìn)入運行狀態(tài)。開發(fā)者應(yīng)該在應(yīng)用程序的執(zhí)行中抓住恰當(dāng)時機,以增量方式進(jìn)行存取永久數(shù)據(jù),以便改善用戶體驗。即使永久數(shù)據(jù)量很小,應(yīng)用程序也應(yīng)該盡量避免在其系統(tǒng)狀態(tài)改變時一次性集中存取永久數(shù)據(jù)。
Closing(結(jié)束)
運行中的應(yīng)用程序可能觸發(fā)什么事件完全由用戶的操作決定。一旦用戶單擊退回鍵若干次,并翻過了應(yīng)用程序的首頁,Closing事件就被觸發(fā),此時應(yīng)用程序?qū)⒈唤K止。
處理Closing事件時,開發(fā)者應(yīng)該把所有的永久數(shù)據(jù)保存到獨立外存。
處理Closing事件時,開發(fā)者沒有必要保存當(dāng)前實例的瞬間狀態(tài),也就是那些只和本次運行相關(guān)的信息。因為當(dāng)用戶再次啟動應(yīng)用程序并打開首頁時,他體驗到的應(yīng)該是一個從新運行的實例。
Deactivated(暫停)
運行中的應(yīng)用程序一旦被另一個應(yīng)用程序替代并退出系統(tǒng)前臺,Deactivated事件就被觸發(fā),此時應(yīng)用程序被暫停。多種操作能夠引起應(yīng)用程序暫停。當(dāng)用戶單擊開始鍵,或當(dāng)用戶使用啟動器和選擇器和系統(tǒng)幫助,或當(dāng)用戶長時間沒有操作,手機超時自動鎖屏都會使當(dāng)前應(yīng)用程序被暫停。不同于Closing事件所對應(yīng)的應(yīng)用程序被完全終止,Deactivated事件所對應(yīng)的應(yīng)用程序被系統(tǒng)雪藏。這意味著雖然應(yīng)用程序不再運行,但是其運行狀態(tài)被操作系統(tǒng)完全保存。這樣就使用戶可以返回一個被雪藏的應(yīng)用程序,而且返回時的狀態(tài)跟雪藏前完全一樣,就像應(yīng)用程序根本沒有暫停過一樣。
處理Deactivated事件時,開發(fā)者應(yīng)該將應(yīng)用程序的當(dāng)前瞬間狀態(tài)完全保存到PhoneApplicationService類的State屬性里。在必要時恢復(fù)這些瞬間狀態(tài),應(yīng)用程序就能從雪藏狀態(tài)復(fù)蘇。
處理Deactivated事件時,開發(fā)者應(yīng)該將應(yīng)用程序的永久用戶數(shù)據(jù)保存到獨立外存。否則當(dāng)被暫停的應(yīng)用程序不再被激活而被重新啟動時,永久數(shù)據(jù)會被丟失。
處理Deactivated事件的所有操作必須在10秒鐘內(nèi)完成,否則操作系統(tǒng)會終止應(yīng)用程序。由于這個緣故,對于存取大量永久數(shù)據(jù)的應(yīng)用程序,開發(fā)者必須在運行過程中隨時對其進(jìn)行增量保存。計算機基礎(chǔ)知識
處理Deactivated事件時,開發(fā)者不應(yīng)該對應(yīng)用程序做任何破壞性操作,因為一個被暫停的應(yīng)用程序隨時可能在雪藏過程中就復(fù)蘇了,比如用戶快速地連續(xù)單擊開始和退回鍵。
Activated(激活)
當(dāng)一個應(yīng)用程序被暫停和雪藏后,這個應(yīng)用程序可能再也不被激活。這可能是因為用戶從首頁啟動一個應(yīng)用程序的新實例,也可能因為用戶又啟動和雪藏了過多的其他應(yīng)用程序,以至最早被雪藏的應(yīng)用程序超過了應(yīng)用程序堆棧的容量極限而被丟失。
通常情況下,一個應(yīng)用程序被暫停和雪藏后需要被再次激活。用戶可多次單擊退回鍵回到雪藏的應(yīng)用程序。當(dāng)造成應(yīng)用程序暫停的啟動器和選擇器運行完畢,或者被用戶取消,用戶也會回到雪藏的應(yīng)用程序。當(dāng)用戶返回雪藏的應(yīng)用程序,這個應(yīng)用程序就被激活了,Activated事件將會被觸發(fā)。
處理Activated事件時,開發(fā)者應(yīng)該從PhoneApplicationService類的State屬性中讀取程序雪藏前的瞬間狀態(tài)信息,從而完全恢復(fù)到雪藏前的狀態(tài)。
處理Activated事件時,開發(fā)者不應(yīng)該從獨立外存讀取所有永久數(shù)據(jù)。這和處理Launching事件時不應(yīng)該存取永久數(shù)據(jù)是一個道理,目的是避免讓用戶長時間等待應(yīng)用程序啟動。