我的 Android 应用程序正在耗尽电池吗?

我在为 Android 开发一款游戏。它使用表面视图,并使用所提供的标准2D 绘图 API 的排序。当我第一次发布这个游戏的时候,我做了很多愚蠢的事情,比如在每个框架上重新绘制9块补丁,同样的还有文本。之后,我通过绘制 Bitmap 对象并绘制它们的每一帧来优化其中的大部分内容,只有在需要时才重新绘制 Bitmap 对象。

我以前收到过关于电池消耗的投诉,根据我的修改,我想知道(科学地)我是否做了任何改进。不幸的是,我没有任何先前的数据去,所以这将是最有用的比较性能,以其他一些游戏。

我一直在运行 Traceview,主要是为了识别耗费 CPU 时间的方法而使用它的结果。

那么... 判断应用程序电池性能的最佳方法是什么? 什么是好的基准测试?

我知道我可以通过设置查看不同应用程序的% s,但这也是不科学的,因为我从中得到的数字也取决于所有其他应用程序中发生了什么。我已经看过(大部分)谷歌的文档,虽然信息很清楚,你的 应该是节省电池(它偶尔提示如何) ,几乎没有迹象表明我可以衡量如何我的应用程序执行良好。我最不希望看到的就是 Android 市场上更多的电池消耗的抱怨!

先谢谢你。


剪辑

谢谢你所有有用的建议/意见。我真正想知道的是 我如何使用来自 Traceview 的数据(即: 游戏每帧花费的 CPU 时间)来确定电池使用情况(如果可能的话)。回顾我最初的问题,我可以看出我有点含糊其辞。再次感谢。

20369 次浏览

”我知道我可以看到 通过设置不同的应用程序, 但这也是不科学的 我从中得到的数据也取决于 其他地方都发生了什么 应用程序。”

我要做的第一件事就是寻找一个已经存在的应用程序,它有一个已知的,一致的电池使用情况,然后你可以用它作为参考来确定你的应用程序的使用情况。

如果没有这样的应用程序,你将不得不希望从别人的答案... 如果你成功地制作了这样一个应用程序,我建议销售你的新的“电池使用参考”应用程序,以便其他程序员可以使用它。:)

如果你试图衡量“比你以前的版本改进”,我不认为这是有意义的比较另一个游戏!除非这两个游戏有完全一样的效果,否则这就是非科学的。

相反,我会从源代码控制中获取您的应用程序的早期版本,运行它,测量它,然后用最新的代码运行它,并再次比较它。

作为比较,你可以使用命令行工具“ top”(如果你的电话是植根的,那么在 busybox 中肯定可以使用,但是不确定它是否附带一个普通电话。可能不会)。它以百分比的形式显示进程的 CPU 使用情况。

有一种可能性,你的游戏是消耗电池。我认为这取决于以下几个原因:

  • 您的应用程序是 游戏。游戏消耗电池很快。
  • 你是 不断重复Thread的帮助下。您是否限制了 FPS 以使 CPU 跳过不必要的迭代?既然你使用的是2D,我假设你使用的是 SurfaceView。60 FPS 足够做一个实时游戏了。
  • 当应用程序终止时,您不会重复 别说了Thread。因此,当应用程序不存在时,您需要重复代码。
  • 你有一个在 onPause期间做 wait();迭代锁吗?

那些评论说你的游戏正在漏电的人可能是针对你的应用程序不在使用的时候。否则,这将是奇怪的,因为每一个游戏在 Android 市场消耗电池-更多的 或者少。

我的建议是:

我在使用 力量家教开发我的应用程序(有时传感器的速率小于25ns)时观察能源消耗。检查一下,它听起来像这可能是你正在寻找的,应用程序告诉你你正在使用的 mW,J,或相对于系统的其余部分。此外,结果按 CPU、 WiFi、显示器(其他安装的无线电)进行分类。唯一的问题是,它是为特定的手机型号编写的,但我在 EVO 4G、 Galaxy S (Sprint Epic)和 Hero 上使用它获得了巨大的成功。

祝你好运, 史蒂夫

我如何使用来自 Traceview 的数据(即: 游戏中每帧花费的 CPU 时间)来确定电池使用量(如果这是可能的话)

从理论上讲,可以通过逐帧查看电量消耗情况来推断应用程序的电池使用情况。实现这一点的最佳方法是,当你的应用程序运行 CPU 密集型操作时(另外,也可以通过这种方式收集图形处理器的耗电量) ,在给定的时间段(比如两秒钟)评估 CPU (仅)的耗电量,同时记录 TraceView 数据(比如每秒的帧率或失败率) ,给出给定毫秒内穿过 CPU/图形处理器的流量。通过使用这些数据,您可以通过多次运行上述测试来准确计算应用程序的平均峰值功耗。

这就是我说它只是理论的原因: 有许多变量需要考虑:

  1. 在上述测试时运行的其他进程的数量和性质(处理器密集型)
  2. 评估整个 CPU/GPU 功耗的方法(虽然 PowerTator 等工具对于评估功耗是有效的,但在这种情况下,评估不会那么有效,因为需要收集时间戳功耗数据。此外,几乎任何收集电力数据的方法都会引入额外的开销(薛定谔的猫) ,但这严格取决于您需要/希望的准确性水平。)
  3. 功耗信息的原因——如果你想为测试或者 BETA 测试/评估目的定义你的应用的功耗,那么这是一个可行的任务,需要一些决心和适当的工具。如果你想在用户的设备上获得有关“野外”电力消耗的有用信息,那么我会说这是合理的,但不现实。涉及到的可变因素甚至会让最坚定、最有献身精神的研究人员感到头晕。你必须在野外测试每一种可能的设备/Android 版本组合。此外,运行进程/线程和已安装应用程序的组合可能是无法计算的。

我希望这能对你的问题提供一些见解,虽然我可能已经深入到它比需要的。

史蒂夫

对于任何人来说,我们一直在使用的一个非常有用的资源是 AT & T 的一个叫做 ARO 的免费应用程序。

看一下: ARO

它以前曾经帮助过我,但是我并没有看到它被经常提及,所以我想我应该把它放在这里,给任何人看。

高通公司开发了一种名为 Trepn Profiler 的电池分析仪: https://developer.qualcomm.com/mobile-development/increase-app-performance/trepn-profiler

我知道这个问题已经很老了,现在已经很晚了,但是对于那些来这里寻找解决方案的人,我建议你看看 JouleUnit 测试: Http://dnlkntt.wordpress.com/2013/09/28/how-to-test-energy-consumption-on-android-devices/

它集成到 eclipse,并提供了大量的细节,你的应用程序是多少电池消耗。

我知道有三种方法可以帮助你进行科学测量:

  1. 使用专门为此而设计的硬件。季风高压电力监视器。 Https://msoon.github.io/powermonitor/powertool/doc/power%20monitor%20manual.pdf
  2. 下载并安装 Trepn Profiler (一个来自 Qualcomm 的工具)到您的手机上。报告不需要电脑。报告在电话上实时直播。您可以从以下链接下载 Trepn Profiler: https://play.google.com/store/apps/details?id=com.quicinc.trepn&hl=en_US

请注意,对于最近的手机(android 6 +) ,它工作在估计模式。如果需要准确的数字,则需要选择设备的列表。你可在以下连结找到这个清单: Https://developer.qualcomm.com/software/trepn-power-profiler/faq 你可以分别对应用程序和整个系统进行分析。

  1. 使用谷歌电池统计和电池历史。 Https://developer.android.com/studio/profile/battery-historian