墓碑機制簡單定義
說簡單點,就是手機上一個任務(wù)被迫中斷時(如有電話打入),系統(tǒng)記錄下當(dāng)前應(yīng)用程序的狀態(tài)后,(像把事件記錄在墓碑上一樣),然后中止程序。當(dāng)需要恢復(fù)時,根據(jù)“墓碑”上的內(nèi)容,將程序恢復(fù)到中斷之前的狀態(tài)。這樣的一種機制就是“墓碑機制”
墓碑機制具體表現(xiàn)
微軟在今年發(fā)布了全新的Windows Phone 7手機操作系統(tǒng),但令人不解的是,WP7卻不支持多任務(wù)運行。據(jù)了解,WP7并不是嚴(yán)格的單任務(wù),比如WP7中微軟自家的IE和ZUNE就能同時運行。
首先來說一些WP7系統(tǒng)程序運行的基本規(guī)則,微軟不允許任何第三方應(yīng)用程序在WP7的后臺運行,特定時間內(nèi)只有一個應(yīng)用程序的在前臺運行,如果你的應(yīng)用程序沒有在前臺顯示,就表示這些程序并沒有運行,這樣就不耗費運行內(nèi)存和處理器資源。這樣做主要是為了延長電池續(xù)航時間,并保證響應(yīng)一致的用戶體驗。
但是所有的WP7手機都將配備返回按鈕硬件,這個按鈕除了有返回導(dǎo)航功能之外,還將支持應(yīng)用程序之間的切換,比如當(dāng)你在某個應(yīng)用程序時點擊了里面的網(wǎng)頁鏈接,然后調(diào)用內(nèi)置瀏覽器進行查看,在查看完畢之后就可以按返回鍵重新返回剛才的程序。
現(xiàn)在問題就出來了,當(dāng)前的應(yīng)用程序切換回之前的應(yīng)用時,究竟是恢復(fù)了一個應(yīng)用還是重新打開了這個應(yīng)用呢?因為剛才已經(jīng)說過了,WP7不允許后臺運行程序,而兩者的區(qū)別就是,重新打開時不會保持剛才的使用狀態(tài),恢復(fù)是可以延續(xù)使用狀態(tài)的,這就要說到微軟的墓碑(Tombstone)機制了。
墓碑是微軟為WP7切換應(yīng)用程序狀態(tài)的一種處理機制,以使用過程為例,當(dāng)用戶正在使用一個應(yīng)用程序,比如游戲或者新聞閱讀,這時有電話打進來,來電提示和通話頁面將會在前臺顯示,正在運行的游戲就會消失,但是WP7不允許后臺運行應(yīng)用,這時候墓碑機制就會觸發(fā),游戲的運行狀態(tài)包括畫面、進度等等數(shù)據(jù)會凍結(jié)保存,相當(dāng)于暫停,但是游戲確實沒有運行,這也是墓碑名字的含義:應(yīng)用程序已經(jīng)死了,但是墓碑上記錄有臨終前的所有狀態(tài)。當(dāng)通話結(jié)束后,游戲操作系統(tǒng)會將應(yīng)用程序進程重新啟動,并將狀態(tài)數(shù)據(jù)傳遞為應(yīng)用進行恢復(fù),這也相當(dāng)于應(yīng)用從墓地里面爬出來,并按照墓碑上記錄的狀態(tài)進行還原。
在程序代碼示例中,微軟給出了單個應(yīng)用程序的運行狀態(tài)代碼,共有四個App.xaml.cs文件,這些直接關(guān)系到執(zhí)行模式的代碼分別是Application_ Launching、Application_ Activated、Application_ Deactivated、Application_ Closing,分別是啟動、復(fù)活(激活程序恢復(fù)狀態(tài))、停用(記錄墓碑?dāng)?shù)據(jù))、關(guān)閉(徹底關(guān)閉)。開發(fā)者們需要注意的是,在開發(fā)過程中需要使用微軟給出的工具和相關(guān)代碼才能讓自己的應(yīng)用支持墓碑機制,否則當(dāng)用戶正在使用的時候突然一個電話過來之后就得再次手動打開程序重頭再來,這會讓用戶非常不爽。
在早期的WP7系統(tǒng)中,微軟并沒有在程序不運行的時候?qū)⑦M程徹底殺死,而是將其暫停,但是這種情況導(dǎo)致了后臺運行堆棧的混亂,API和事件觸發(fā)經(jīng)常會出現(xiàn)問題,所以微軟才決定使用墓碑機制。
不過完全實行墓碑機制將會影響到電話的某些功能,比如短信、即時通信、天氣等需要時刻保持運行和更新的應(yīng)用,微軟同樣給出了推送通知服務(wù)(Push Notification Services)的API,允許應(yīng)用程序調(diào)用該接口保持實時更新。
內(nèi)容來自百科網(wǎng)