导语:美国科技博客 The Next Web 周二刊登了移动行业资深产品经理拉加特·哈拉尔卡(Rajat Harlalka)的文章,向应用开发者介绍了如何降低应用能耗的方式。智能手机的电池续航时间是用户非常关心的一个问题,而应用的能耗过大将导致用户不愿使用该应用。
以下为文章全文:
尽管智能手机给应用开发者带来了机遇,但移动设备有限的资源也制造了挑战。而挑战之一在于电量消耗。如果电量消耗过大,那么应用将遭到差评。在某些情况下,这甚至会导致用户彻底删除应用。因此相对于传统的对性能和内存消耗的关注,应用开发者正越来越注重应用的能耗优化。
降低应用能耗可以采用多种技术,其中包括一些深度分析和优化。这里将提供简单的指南,其中的做法将明显提升应用的性能。
显示屏
显示屏是耗电量最大的元件之一。一篇对移动游戏能耗管理的研究论文估计,在 HTC Magic 手机中,如果所有元件都全功率运行,那么液晶显示屏将占整个系统功耗的 45% 至 50%。因此对于显示屏,有两点需要牢记:
1. 智能手机操作系统的设计使得在没有用户输入的情况下,屏幕会自动熄灭。应用开发者可以对这一设置进行调整,但只在有必要时才这样做。
2. 第二种方式可能相对复杂。在正常情况下,图像和显示屏的亮度为默认设置。然而,通过调高图像和内容的亮度,同时减弱显示屏的整体亮度,应用可以提供同样的可感知亮度。这样的做法适用于视频应用和游戏,而这些应用往往功耗较大。
网络连接
除显示屏之外,无线通信元件,包括 GSM、3G 和 WiFi 芯片是移动设备中电量消耗的第二“大户”。新加坡国立大学的一篇论文提到,当显示屏点亮时,移动数据通信占移动设备能耗的约 40%,而在显示屏熄灭时占总能耗的约 70%。以下一些方式可以限制应用对网络连接的使用。
1. 如果使用后端服务器,那么应用应当采用突发模式传输数据,而非周期性传输。在周期性传输模式下,尽管对流量的消耗不大,但对硬件资源的利用效率会很低。一个简单的做法是,在用户主动请求数据传输的同时进行周期性数据传输。请勿建立太多的并发 TCP 连接,而是使少量 TCP 连接或 HTTP 管道持续存在。
2. 数据缓存也可以减少应用与服务器通信的频率。本地缓存和服务器缓存都可以减少通过网络的数据传输。
3. 基于位置的服务尤其耗电,因此在没有必要的情况下,不要持续更新设备位置。例如,如果应用需要获取用户的行动轨迹,而不是单独某一位置,那么可以使用少数几个位置点,基于算法获得整体的运动信息。而另一项技术则是在设备没有运动时关闭 GPS 模块。开发者可以利用手机的加速计来感应运动是否开始。
4. 移动广告通常也需要频繁进行网络通信。近期的一项研究表明,在某一应用的总通信能耗中广告占 65%,而在总能耗中也占 23%。
CPU 的使用
在优化应用性能时,应用的功耗也将得到优化。通过减少不必要的计算任务或优化必要任务的执行,CPU 利用率都可以获得下降。
1. 对于游戏,考虑降低每秒帧数。在许多情况下,用户肉眼无法分辨出帧数差异,除非帧率过低。肉眼分辨的极限通常为每秒 23 至 30 帧,这也是大部分视频应用和游戏采用的帧率。
2. 当应用终止时停止应用的线程,否则在应用关闭的情况下将出现无用代码。
3. 开发者需要了解目标设备的硬件配置。例如,当设计音频/视频应用时,应当选择硬件支持的格式和编解码方式。如果采用硬件加速而非软件加速,那么 CPU 利用率将可以下降。
4. 使用云计算技术将移动应用的计算任务放在云端执行。
5. 避免周期性轮询,以及过分频繁地访问存储模块。
6. 在复杂计算任务中考虑使用查询表。
关闭不必要的硬件
智能手机包含多种元件,例如摄像头、加速计,以及其他多种传感器。在调用设备硬件时,开发者应当确保软件带有参数,当应用不活跃时关闭外设硬件。在用户不使用时主动关闭蓝牙和 GPS 等模块将可以极大地省电。
挑战和工具
许多位于应用和硬件之间的中间件能帮助开发者更方便地开发移动应用,但这也意味着开发者无法自主掌握硬件资源的消耗。不幸的是,开发者目前没有太多工具去改进应用能耗。实际上,许多开发者甚至并不清楚自己应用的能耗。
优秀的能耗管理需要开发者了解,电量被什么元件,以及以什么样的方式消耗。开发者目前只有很少的工具和资源去检查应用的能耗情况。在 iPhone 上,开发者可以打开能耗诊断工具,随后使用模板去分析日志数据。PowerTutor 工具可以在 Android 手机上实现类似的功能。不过,这些软件工具有着自己的局限,即本身也会增加能耗。
衡量能耗的最佳方式是从电池层面去分析,开发者可以在受控的环境中使用数字万用表去测量。
意义重大
摩托罗拉移动前 CEO 桑杰·贾(Sanjay Jha)曾表示,设计拙劣的应用将大量消耗手机电量。电池续航时间是智能手机用户非常关心的问题,而一些应用的评价显示,许多用户对应用能耗不满。另一方面,许多应用开发者对能耗管理没有太多经验,因此到目前为止移动应用的能耗大多很高。
这篇文章中提到的方式尽管很简单,但也能大幅降低应用能耗。不过请记住,所有这些技术都将带来副作用,包括对应用性能和内存管理产生不利影响。开发者可以基于自己的特定需求选择最合适的方式。