當(dāng)前位置:首頁(yè) > 百科知識(shí) > 電子工程 > 正文

墓碑機(jī)制

墓碑機(jī)制是微軟Windows Phone 7手機(jī)操作系統(tǒng)軟Windows Phone 7手機(jī)操作系統(tǒng)中的一個(gè)程序運(yùn)行規(guī)則。

墓碑機(jī)制簡(jiǎn)單定義

  說(shuō)簡(jiǎn)單點(diǎn),就是手機(jī)上一個(gè)任務(wù)被迫中斷時(shí)(如有電話打入),系統(tǒng)記錄下當(dāng)前應(yīng)用程序的狀態(tài)后,(像把事件記錄在墓碑上一樣),然后中止程序。當(dāng)需要恢復(fù)時(shí),根據(jù)“墓碑”上的內(nèi)容,將程序恢復(fù)到中斷之前的狀態(tài)。這樣的一種機(jī)制就是“墓碑機(jī)制”

墓碑機(jī)制具體表現(xiàn)

  微軟在今年發(fā)布了全新的Windows Phone 7手機(jī)操作系統(tǒng),但令人不解的是,WP7卻不支持多任務(wù)運(yùn)行。據(jù)了解,WP7并不是嚴(yán)格的單任務(wù),比如WP7中微軟自家的IE和ZUNE就能同時(shí)運(yùn)行。

  首先來(lái)說(shuō)一些WP7系統(tǒng)程序運(yùn)行的基本規(guī)則,微軟不允許任何第三方應(yīng)用程序在WP7的后臺(tái)運(yùn)行,特定時(shí)間內(nèi)只有一個(gè)應(yīng)用程序的在前臺(tái)運(yùn)行,如果你的應(yīng)用程序沒(méi)有在前臺(tái)顯示,就表示這些程序并沒(méi)有運(yùn)行,這樣就不耗費(fèi)運(yùn)行內(nèi)存和處理器資源。這樣做主要是為了延長(zhǎng)電池續(xù)航時(shí)間,并保證響應(yīng)一致的用戶體驗(yàn)。

  但是所有的WP7手機(jī)都將配備返回按鈕硬件,這個(gè)按鈕除了有返回導(dǎo)航功能之外,還將支持應(yīng)用程序之間的切換,比如當(dāng)你在某個(gè)應(yīng)用程序時(shí)點(diǎn)擊了里面的網(wǎng)頁(yè)鏈接,然后調(diào)用內(nèi)置瀏覽器進(jìn)行查看,在查看完畢之后就可以按返回鍵重新返回剛才的程序。

  現(xiàn)在問(wèn)題就出來(lái)了,當(dāng)前的應(yīng)用程序切換回之前的應(yīng)用時(shí),究竟是恢復(fù)了一個(gè)應(yīng)用還是重新打開(kāi)了這個(gè)應(yīng)用呢?因?yàn)閯偛乓呀?jīng)說(shuō)過(guò)了,WP7不允許后臺(tái)運(yùn)行程序,而兩者的區(qū)別就是,重新打開(kāi)時(shí)不會(huì)保持剛才的使用狀態(tài),恢復(fù)是可以延續(xù)使用狀態(tài)的,這就要說(shuō)到微軟的墓碑(Tombstone)機(jī)制了。

  墓碑是微軟為WP7切換應(yīng)用程序狀態(tài)的一種處理機(jī)制,以使用過(guò)程為例,當(dāng)用戶正在使用一個(gè)應(yīng)用程序,比如游戲或者新聞閱讀,這時(shí)有電話打進(jìn)來(lái),來(lái)電提示和通話頁(yè)面將會(huì)在前臺(tái)顯示,正在運(yùn)行的游戲就會(huì)消失,但是WP7不允許后臺(tái)運(yùn)行應(yīng)用,這時(shí)候墓碑機(jī)制就會(huì)觸發(fā),游戲的運(yùn)行狀態(tài)包括畫(huà)面、進(jìn)度等等數(shù)據(jù)會(huì)凍結(jié)保存,相當(dāng)于暫停,但是游戲確實(shí)沒(méi)有運(yùn)行,這也是墓碑名字的含義:應(yīng)用程序已經(jīng)死了,但是墓碑上記錄有臨終前的所有狀態(tài)。當(dāng)通話結(jié)束后,游戲操作系統(tǒng)會(huì)將應(yīng)用程序進(jìn)程重新啟動(dòng),并將狀態(tài)數(shù)據(jù)傳遞為應(yīng)用進(jìn)行恢復(fù),這也相當(dāng)于應(yīng)用從墓地里面爬出來(lái),并按照墓碑上記錄的狀態(tài)進(jìn)行還原。

  在程序代碼示例中,微軟給出了單個(gè)應(yīng)用程序的運(yùn)行狀態(tài)代碼,共有四個(gè)App.xaml.cs文件,這些直接關(guān)系到執(zhí)行模式的代碼分別是Application_ Launching、Application_ Activated、Application_ Deactivated、Application_ Closing,分別是啟動(dòng)、復(fù)活(激活程序恢復(fù)狀態(tài))、停用(記錄墓碑?dāng)?shù)據(jù))、關(guān)閉(徹底關(guān)閉)。開(kāi)發(fā)者們需要注意的是,在開(kāi)發(fā)過(guò)程中需要使用微軟給出的工具和相關(guān)代碼才能讓自己的應(yīng)用支持墓碑機(jī)制,否則當(dāng)用戶正在使用的時(shí)候突然一個(gè)電話過(guò)來(lái)之后就得再次手動(dòng)打開(kāi)程序重頭再來(lái),這會(huì)讓用戶非常不爽。

  在早期的WP7系統(tǒng)中,微軟并沒(méi)有在程序不運(yùn)行的時(shí)候?qū)⑦M(jìn)程徹底殺死,而是將其暫停,但是這種情況導(dǎo)致了后臺(tái)運(yùn)行堆棧的混亂,API和事件觸發(fā)經(jīng)常會(huì)出現(xiàn)問(wèn)題,所以微軟才決定使用墓碑機(jī)制。

  不過(guò)完全實(shí)行墓碑機(jī)制將會(huì)影響到電話的某些功能,比如短信、即時(shí)通信、天氣等需要時(shí)刻保持運(yùn)行和更新的應(yīng)用,微軟同樣給出了推送通知服務(wù)(Push Notification Services)的API,允許應(yīng)用程序調(diào)用該接口保持實(shí)時(shí)更新。


內(nèi)容來(lái)自百科網(wǎng)