移動設備上的開發,最重要的一點就是耗電量問題,再優秀的軟件,假如耗電量過大的話,必然會成爲一個失敗的產品。Android設備上解決耗電的一個策略就是休眠,手機在鎖屏以後一段時間手機就會休眠,那個時候,不管是屏幕,CPU仍是其餘模塊都會中止工做,這樣致使了幾個問題: 服務器
1.一些通信軟件的心跳包中斷,致使掉線 架構
2.若採用UDP鏈接的狀況下,服務器過來的數據包不必定實時。 工具
咱們來說講如何解決以上的兩個問題。Android手機有兩個處理懲罰器,一個叫Application Processor(AP),一個叫Baseband Processor(BP)。AP是ARM架構的處理處理器,用於運行Linux+Android體系;BP用於運行及時操縱體系(RTOS),通訊協議棧運行於BP的RTOS之上。非通話時候,BP的能耗基本在5mA如下,而AP只要處於非休眠情況,能耗至少在50mA以上,履行圖形運算時會更高。別的LCD工做時功耗在100mA左右,WIFI也在100mA左右。通常手機待機時,AP、LCD、WIFI均進入休眠情況,這時Android中應用法度的代碼也會中止運行。 spa
Android爲了確保一些關鍵代碼的正確運行,供給了Wake Lock的API,使得應用有權限經由過程代碼阻攔AP進入休眠情況(iOS、WP7都沒這種器材)。如果不懂得Android設計者的意圖而濫用Wake Lock API,爲了自身代碼在後臺的正常工做而長時候阻攔AP進入休眠情況,結果就至關嚴重了,手機的電量就犀利嘩啦的被用完了。 設計
首先,徹底沒需要爲了AP休眠會致使收不到消息推送而發愁。通訊協議棧運行於BP,一旦收到數據包,BP會將AP喚醒,喚醒的時間足夠AP完成對BP收到協議的處理,可是有一點須要你們注意的是,假如你處理協議包的時間很長的話,那麼請加上wakelock,完成以後再釋放掉。 開發
其次,須要注意的是,TCP長鏈接是能夠將AP喚醒,可是UDP數據包並不會喚醒。。。具體的緣由多是由於底層對於TCP長鏈接的數據過來,會產生AP中斷來喚醒AP,可是UDP不會。。。這麼作也是有道理的,由於TCP長連接是客戶端自身驗證過的服務器,也就是數據來源可靠。。。若UDP也會喚醒,那徹底能夠進行UDP數據包工具,這樣一來,被攻擊的手機至少耗電量將會大幅度上升。