# 耗电惊人的移动广告

- 作者：黄俊杰
- 发布时间：2012-03-21 12:35
- 分类：公司
- 原文：https://www.ifanr.com/79437

![Angry Birds Free](https://s3.ifanr.com/wp-content/uploads/2012/03/Screenshot_2012-03-21-12-28-41_thumb.jpg)

为研究智能手机应用究竟把电力花在什么地方，美国普渡大学与微软研究院的研究人员最近开发了一个名为 Eprof 的应用以监视每个应用启动的线程以及相应耗电情况。Eprof 可以用于 Android 和 Windows Mobile 智能手机应用的耗电情况。Windows Mobile 已经被微软判了死刑，他们对 Android 的分析才是重点。

测试结果可能会让不少人吃惊，一些免费游戏应用耗电的 65%-75% 被用于第三方广告模块以及 Flurry 等为开发者收集用户信息的服务。不过别紧张，广告模块耗电比例如此之高并不是因为它们下载了多少垃圾——大部分时间只是白白浪费电力而已。

以愤怒的小鸟免费版为例，游戏过程中先后开启 35 个进程。其中 GLThread 线程是游戏的核心，处理游戏画面和触控操作。尽管 GLThread 线程调用了大量 CPU 资源，但它只占游戏耗电的 18% 而已，其中还有 1% 被用于广告条渲染（为便于理解，本文所有百分比均为占应用总耗电量的比例）。

为开发者搜集数据的 Flurry 线程才是耗电大头，占愤怒的小鸟免费版总耗电量的 45%。其中 GPS 模块收集位置信息耗去 15%，GPS 模块工作完毕后没有及时转入低功耗状态又耗电 4%。Flurry 收集手机相关信息耗电不足 1%、通过 3G 上传这些信息（2KB）耗电 1%，但 3G 模块工作完毕后继续维持高功耗状态耗电 24%。游戏关闭后 HeapWorker 进程进行收尾，中止游戏期间开启的各种接口，但它再一次让 3G 模块保持高功耗状态浪费 28% 电力。

也就是说根据 Eprof 的检测，玩一关愤怒的小鸟免费版，有近四分之三的电力被用于第三方广告以及用户信息收集。其中广告和 Flurry 收集用户信息一共耗电 18%、被 Flurry 和广告激活的 GPS 模块和通信模块在工作完毕后浪费了 56% 的电力。

研究人员还测试了另一个非常流行的免费游戏 [Chress Free](https://play.google.com/store/apps/details?id=uk.co.aifactory.chessfree)，33 秒的游戏过程中仅 AdWhirl 广告相关线程耗电就超过 50%，绝大部分浪费在工作完毕后继续维持高功耗状态的 3G 模块上。其它测试的流行应用还包括《纽约时报》应用和自带浏览器等等。这些应用浪费的电力没前两个游戏那么多，但基本也将至少两成电力用于广告和信息搜集（浏览器进行 Google 搜索或访问 CNN 等网站都会搜集位置信息）。

需要注意，Eprof 只监视了处理器以及无线、GPS 等模块，并未覆盖耗电巨大的屏幕。所以广告和 Flurry 耗电实际比例没有四分之三那么高。而且 Flurry 也不会每分钟都活动，游戏时间越长这些模块耗电所占比例就越低。不过考虑到手机游戏主要被用于消磨闲散时间，多数人不会每天连续玩几小时，现在的耗电比例还是有点高。开发者有必要花点时间优化。

研究人员在相关论文里详细解释了耗电原因和可行的优化方法，完整的 PDF 文档可以在微软研究院网站[下载](http://research.microsoft.com/en-us/people/mzh/eurosys-2012.pdf)。Eprof 未来也会采用开源协议供外界使用，不过由于系统的限制，可能永远也无法推出 iOS 和 Windows Phone 版本。
