最近搞了一下程式耗電的問題,記錄一點心得.cnblogs裡面貌似也有一個MVP寫過這個,可以去看看.
耗電量,其實也是效能問題.程式最佳化麼,就是要找到程式的瓶頸,然後才能最佳化.程式啟動並執行慢,可以找Profile工具查看一下,可是這個電量確實不好搞.看來只能上笨辦法:對照實驗.通過對照實驗,才能瞭解程式的瓶頸具體出在什麼地方,到底是什麼模組在費電.
有了方法,剩下來就是實驗,發現瓶頸,解決.我想這個應該不難吧?
下來介紹一點經驗:
1. 網路裝置是相當耗電的.開始沒注意,後來經過對比實驗發現網路其實是最耗電的.沒事幹Google一下,發現一些資料(因為我不是搞硬體的),GPRS/1xRTT裝置工作的時候,功耗可以達到1W+,當然Sleep的時候,功耗很小,可以忽略不計.所以,謹慎的使用網路是省電的第一要義.
2. GPS裝置很耗電??基本上可以斷定,這是一個謊言.經過對照實驗發現,單純的GPS裝置耗電量很少.Google出來的資料,也有一定的參考價值,就是工作電壓3.7V,工作電流90ms,這樣的話就只有333mW,更有甚者提供一些省電GPS模組,工作電流只有45ms.還有,GPS裝置開啟關閉時有一個充電的過程,這個過程是否耗電呢?測試發現,也基本上不耗電,所以推薦不用GPS的時候把他關掉(反正第二次拿GPS資料速度很快).
3. CPU很耗電. 這個很難判定,因為我還沒有那個能力讓只讓CPU轉或者不轉...........網路的一些資料表明,CPU其實也是不怎麼耗電的,Cortex-A9 CPU的單核功耗不會超過300mW.
4. 螢幕,背光燈. 背光燈我沒測試,因為我暫時沒有想出來什麼情境需要一直把背光開啟:P,螢幕麼,一直開著,就意味著CPU一直轉著,反正WM在那裡空轉7個小時也沒啥問題,估計也不怎麼耗電.
5. 動不動就讓WM待機會省電吧??
這肯定是一個謊言.WM從睡眠中喚醒的時候,是一個非常耗電的過程.最開是我們的程式較短時間就喚醒WM,結果省的電並沒有想象的那麼多.不過Smartphone上面沒這種問題,因為系統不會真正待機,只會關掉螢幕.
因為我們的程式也就只用這麼幾樣東西,其他的都沒用過,所以只能寫著麼多.
我不太鼓勵剛開始寫程式就考慮省電問題,就跟剛開始寫程式就考慮效能問題一樣,那樣只會使問題變得更複雜.
另外,關於WM電源管理,"Windows CE電源管理之三"你需要看一下;
將睡眠的作業系統喚醒,你需要瞭解一下CeRunAppAtTime那一組API,比較好用;
斷開網路,我在Dopod上面實驗的結果就是,斷開網路不成功,再次撥號斷開就可以了,實在不行就需要用RAS,請看這裡.
PS:授人以魚不如授人以漁.