Android Note - 电量优化

668 阅读3分钟

我们注意到,现在但凡每个手机厂商开新品发布会,关于电量的内容永远是占了重要的篇幅。现在的智能手机虽然性能远非早前功能机时代的手机可比,但是电量损耗反而好像是越来越大了?这有点 “日益增长的使用需要和不平衡不充分的电池电量技术发展之间的矛盾” 一样的感觉,是一个用户非常关注的问题。

在硬件上,我们作为软件开发者可能是爱莫能助;但是在应用层面上来说,我们能做的事情很多。下面就简单讲一下开发时要注意的一些地方。


耗电场景

具体到开发中,我们会碰到的耗电场景主要有下面一些场景。

  1. 屏幕点亮,组件开始工作,界面开始渲染流程。因为唤醒屏幕让屏幕亮起本身会消耗大量的电能。
  2. 使用蜂窝数据。这一块耗电是因为手机是通过 “射频” 模块与外界通信的,而这个模块也是手机中消耗电能的大户。
  3. 使用高精度的位置信息。这个也是电量消耗的大头了,早几年系统底层优化不够完善的时候,使用 GPS 一会儿手机甚至会发热发烫。

耗电优化

知道了耗电场景,那我们就可以有针对性地对这些场景进行优化了。

  1. 屏幕的渲染及CPU的长时间运行是耗电的主要因素,在做内存优化、渲染优化、代码优化的时候,也能帮助应用进行电量优化,这都是相辅相成的。

  2. 如果可以的话,监听手机充电状态,并在充电时才执行一些非常耗电的操作,比如下载文件,备份信息,上传日志等。

  3. 是否保持屏幕常亮要依据场景来决定,比如地图,阅读类的应用;最好给用户一个可以选择是否需要屏幕常亮的选项。

  4. GPS 选用合适的 Location Provider,并及时注销定位监听。有 GPS_PROVIDER,通过 GPS 来获取地理位置的经纬度信息;以及 NETWORK_PROVIDER,通过移动网络的基站或者 Wi-Fi 来获取地理位置;其中的区别就不细说了。

  5. 网络优化,判断当前网络状况,如果无网络,则不发送网络请求,避免太多超时重试;如果是蜂窝数据,则降低请求频率,减少重连次数;如果有长连接,记得关掉。

  6. 使用JobScheduler执行后台作业。JobSchedule的宗旨就是把一些不是特别紧急的任务放到更合适的时机批量处理。这样做有两个好处:一是避免频繁的唤醒硬件模块,造成不必要的电量消耗;二是避免在不合适的时间(例如低电量情况下、弱网络或者移动网络情况下的)执行过多的任务消耗电量。


总结

其实电量优化这一块的内容,往往也是我们在做其他性能优化时要注意的东西,这就要求我们在写代码时,更加深入地看待问题的实质,并始终保持一个良好的编码习惯。这样我们就能在应用层面,给用户带来更好的体验。