最近搞了一下程序耗电的问题,记录一点心得.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:授人以鱼不如授人以渔.