flywhc的博客

各版發帖集錦,啥都有
正文

Windows Phone手機係統的多任務設計

(2011-06-01 09:26:43) 下一個

其他手機操作係統的多任務設計其實我不是很了解,但據我了解大概是這樣:


symbian多數API都是異步的,用個變量激活activeobject的方式,後台優先級低,前台優先級高,但不管怎樣後台都有機會一直運行下去。因此造成寫的不好的程序一直運行導致CPU不能進入待機狀態。


Windows Mobile是用消息機製,其實內部用的event的方式,當消息隊列無消息時可以idle,但也可不idle一直循環下去。因此寫的不好的程序耗電更大一些。同樣OS一般不會剝奪後台程序運行的機會


以上兩種係統在CPU已經進入待機時,沒有事件的時候所有線程都休息,有硬件消息到達時隻有響應消息的線程會短暫運行,然後掛起,除非那個線程徹底喚醒CPU。設計不好的程序會一直讓手機在喚醒狀態,雖然屏幕黑的,但CPU和其他硬件一直運作。


android我不了解,應該也差不多吧。


 


IOS裏,對於第三方應用程序是前台可以運行,後台不許運行。但蘋果自己的程序卻可以在後台運行。後來開發了後台的接口,可以在某些事件時運行有限的時間,例如網絡收音機播放緩衝區空了要下載,或者程序關閉時給幾秒保存數據,VoIP電話等等,都是限製應用,限製時間。這樣即使程序沒寫好也不會浪費太多電。


 


此外,傳統的推送(push)服務是一個手機客戶端對應一個服務器,每個服務至少都要保持一個連接,每隔一段時間要喚醒係統發送一個heartbeat信號給服務器保持連接。如果有許多許多推送服務,就造成要維護大量連接,係統不斷被喚醒,發一大堆heartbeat,浪費電池和網絡流量,要知道對於3G發射機當數據發送後要保持一段的高功率再降低功率,如果反複發很小的數據包會使手機一直在高功率狀態。IOS對於推送的應用采用統一的PUSH服務器,隻需要操作係統維護一個socket連接就好了,大概每15分鍾才發一次heartbeat。而且當推送事件到達時,所請求的程序並未運行,需要用戶主動點擊才能運行,例如收到郵件,不點查看按鈕是不運行郵件程序的,這樣防止了後台程序通過這種方式主動跑到前台來浪費電。


 


其實我要說的是新出的Windows Phone 7.1 Mango。它跟IOS差不多,也是不許第三方程序在後台運行。為了某種應用,例如多媒體播放、插著充電器的時候用WIFI下載(不插電用3G都不許下載)等等,也可以臨時在後台運行。還有同樣的PUSH服務機製,微軟PUSH服務器也是免費的,隨便一個IIS服務器即可輕鬆寫好PUSH腳本。後台程序的問題不僅僅是耗電,還會影響前台程序的效率,這僅僅靠線程優先級是不夠的。在WP裏特別保證前台程序有90%的耗用以及90MB的內存;而後台總共最多隻有那10%的CPU,每個程序可以有3MB內存,多媒體程序因為要解碼可以多一點,5MB內存,內存用超了OS會殺掉進程,美名曰主動防止內存泄露……開發者肯定說這太限製自由了,可是這是保障用戶體驗的設計,因此WP手機有如此流暢的操作,不管裝了多少程序,都不怕玩遊戲的時候卡,甚至優於IPHONE。

[ 打印 ]
閱讀 ()評論 (0)
評論
目前還沒有任何評論
登錄後才可評論.