作者felaray (<^)<)
看板WindowsPhone
標題Re: [討論] 為何WP7比Android還順? 從設計概念說起
時間Wed Oct 19 01:17:38 2011
看大家討論的很熱烈 很想修文來回應 不過怕修到大家的討論XD
我這篇提供一篇翻譯過後的文章,來源是大陸的百度網。(以下資料應該是7.0的)
墓碑機制
墓碑機制簡單定義
墓碑機制是微軟Windows Phone 7手機操作系統中的一個程序運行規則。 說簡單點,就是
手機上一個任務被迫中斷時(如有電話打入),系統記錄下當前應用程序的狀態後,(像
把事件記錄在墓碑上一樣),然後中止程序。 當需要恢復時,根據“墓碑”上的內容,
將程序恢復到中斷之前的狀態。 這樣的一種機制就是“墓碑機制”
墓碑機制具體表現
微軟在今年發布了全新的Windows Phone 7手機操作系統,但令人不解的是,WP7卻不支持
多任務運行。 據了解,WP7並不是嚴格的單任務,比如WP7中微軟自家的IE和ZUNE就能同
時運行。
首先來說一些WP7系統程序運行的基本規則, 微軟不允許任何第三方應用程序在WP7的後
台運行 ,特定時間內只有一個應用程序的在前台運行 , 如果你的應用程序沒有在前台
顯示,就表示這些程序並沒有運行 ,這樣就不耗費運行內存和處理器資源。 這樣做主要
是為了延長電池續航時間,並保證響應一致的用戶體驗。
但是所有的WP7手機都將配備返回按鈕硬件,這個按鈕除了有返回導航功能之外,還將支
持應用程序之間的切換,比如當你在某個應用程序時點擊了裡面的網頁鏈接,然後調用內
置瀏覽器進行查看,在查看完畢之後就可以按返回鍵重新返回剛才的程序。
現在問題就出來了,
當前的應用程序切換回之前的應用時,究竟是恢復了一個應用還是重
新打開了這個應用呢? 因為剛才已經說過了,WP7不允許後台運行程序,而兩者的區別就
是,重新打開時不會保持剛才的使用狀態,恢復是可以延續使用狀態的,這就要說到微軟
的
墓碑(Tombstone )機制了。
墓碑是微軟為WP7切換應用程序狀態的一種處理機制,以使用過程為例,當用戶正在使用
一個應用程序,比如游戲或者新聞閱讀,這時有電話打進來,來電提示和通話頁面將會在
前台顯示,正在運行的遊戲就會消失,但是
WP7不允許背景執行應用,這時候墓碑機制就
會觸發, 遊戲的運行狀態包括畫面、進度等等
數據會凍結保存 ,相當於暫停,但是遊戲
確實沒有運行,這也是墓碑名字的含義:應用程序已經死了,但是墓碑上記錄有臨終前的
所有狀態。 當通話結束後,遊戲操作系統會將應用程序進程重新啟動,並將狀態數據傳
遞為應用進行恢復,這也相當於應用從墓地裡面爬出來,並按照墓碑上記錄的狀態進行還
原。
在程序代碼示例中,微軟給出了單個應用程序的運行狀態代碼,共有四個App.xaml.cs文
件,這些直接關係到執行模式的代碼分別是Application_ Launching、Application_
Activated、Application_ Deactivated、Application_ Closing,分別是啟動、復活(
激活程序恢復狀態)、停用(記錄墓碑數據)、關閉(徹底關閉)。 開發者們需要注意
的是,在開發過程中需要使用微軟給出的工具和相關代碼才能讓自己的應用支持墓碑機制
,否則當用戶正在使用的時候突然一個電話過來之後就得再次手動打開程序重頭再來,這
會讓用戶非常不爽。
(原po:這真的讓人很不爽 尤其是很多小遊戲很容易跳出要重玩)
在早期的WP7系統中,微軟並沒有在程序不運行的時候將進程徹底殺死,而是將其暫停,
但是這種情況導致了後台運行堆棧的混亂, API和事件觸發經常會出現問題,所以微軟才
決定使用墓碑機制。
不過完全實行墓碑機制將會影響到電話的某些功能,比如短信、即時通信、天氣等需要時
刻保持運行和更新的應用,微軟同樣給出了推送通知服務(Push Notification Services
)的API ,允許應用程序調用該接口保持實時更新。
--
1F:推 KevinLomax:樓下w96284cn07/25 13:32
2F:→ w96284cn:你當我那麼宅每篇都回嗎?07/25 13:36
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.62.70.141
3F:推 james732 :那可以一邊聽音樂一邊做其他的事嗎? 10/19 01:41
4F:→ james732 :這樣聽起來似乎不能寫出作為server端的應用程式…? 10/19 01:42
5F:→ friedpig :我記得沒錯的話內建的播放程式可以 其他的就不知道了 10/19 01:43
6F:→ felaray :當然可以! 這是7.0的 7.1的請看"多工"的資料 10/19 01:43
7F:→ felaray :因為7.0不支援多工,7.1(芒果)就支援了! 10/19 01:44
8F:→ james732 :樓上說的資料要去哪裡看呢? (我承認我非常不熟XD) 10/19 01:48
10F:推 james732 :感謝,好久沒有寫微軟的程式了...XD 10/19 01:56
11F:→ hatarakiman :7.1? 7.5? @@ 10/19 01:57
12F:→ felaray :正式版本編號為7.1(Mango) 當然也有人稱7.5.. 10/19 02:00
13F:→ hatarakiman :感謝解說^^ 10/19 02:00
14F:→ felaray :要開發的話可能要學C# / silverlight /blend XD 10/19 02:00
15F:→ felaray :書籍可以參考版上有的文章 10/19 02:00
16F:→ james732 :WP有像Android那樣釋放原始碼嗎,還是像Win一樣封閉? 10/19 02:02
17F:→ felaray :封閉式的~ 10/19 02:04
18F:→ james732 :了解,感謝您回答我的笨問題XD 10/19 02:04
19F:→ felaray :不會啦 android原本其實是linux社群的產物 所以也是 10/19 02:06
20F:→ felaray :走開放式原始碼~ 10/19 02:06
21F:→ james732 :我會去亂挖Android比較簡單的回來看,所以很好奇WP 10/19 02:07
22F:→ james732 :有沒有地方可以挖...XD 10/19 02:07
23F:→ felaray :WP7的MSDN社群裡面 有鍊金室 有些範例code 10/19 02:09
24F:→ james732 :再問,自己寫程式放進WP手機,會像Android那麼簡單, 10/19 02:11
25F:→ james732 :還是像iOS那麼麻煩? 10/19 02:11
26F:→ friedpig :像IOS 10/19 02:12
1.註冊app hub帳號
2.在app hub註冊手機為開發手機
3.在VS2010(開發工具)透過手機模擬器執行app / 或是接上USB傳進去手機上執行
※ 編輯: felaray 來自: 61.62.70.141 (10/19 02:15)
27F:推 james732 :了解,我來研究一下細節XD 10/19 02:17
28F:→ felaray :晚安 今晚玩累了 睡覺XD 難得整天逛PTT..都怪版主丟 10/19 02:18
29F:→ felaray :了我這個問題 害我想好好回答XD 10/19 02:18
30F:推 james732 :不過要感謝您讓我這個湊熱鬧的鄉民學到好多XD 10/19 02:20
31F:推 ethan4ptt :感謝好文,看起來墓碑機制跟iOS的偽多工有點像 10/19 03:14
32F:推 cainhighwind:所以前一篇提到微軟會要求載入時間就是因為實際上 10/19 08:11
33F:→ cainhighwind:程式會被關閉哩 10/19 08:11
34F:推 alljerry04 :版本號7.1 產品名稱 7.5 開發代號Mango 10/19 11:14
35F:推 stalinone :Mango有quick resume和background agent兩個東西 10/19 20:09
※ felaray:轉錄至看板 MobileComm 12/09 14:58