74

我正在为 Android 开发游戏。它使用表面视图并使用提供的那种标准 2D 绘图 API。当我第一次发布游戏时,我正在做各种愚蠢的事情,比如在每一帧上重新绘制 9 个补丁,同样还有文字。此后,我通过绘制位图对象并在每一帧中绘制它们来优化其中的大部分内容,仅在需要时才重新绘制到位图对象上。

我之前收到过关于电池耗尽的投诉,并且在我进行修改后,我想(科学地)知道我是否做了任何改进。不幸的是,我没有任何先前的数据可供参考,因此将性能与其他游戏进行比较将是最有用的。

我一直在运行 Traceview,并且主要使用它的结果来识别消耗 CPU 时间的方法。

那么——确定我的应用程序电池性能的最佳方法是什么,什么是好的基准?

我知道我可以通过设置查看不同应用程序的 %s,但这又是不科学的,因为我从中得到的数字也取决于所有其他应用程序中发生的情况。我已经浏览了(大部分)谷歌的文档,虽然信息很清楚你应该节省电池(并且它偶尔会给出如何节省电池的提示),但几乎没有迹象表明我可以如何衡量我的应用程序的性能表演。我想要的最后一件事是更多关于 Android 市场中电池耗尽的投诉!

提前致谢。


编辑

感谢您提供的所有有用的建议/建议。我真正想知道的是如何使用来自 Traceview 的数据(即:游戏每帧花费的 CPU 时间(以毫秒为单位))来确定电池使用情况(如果这可能的话)。回顾我原来的问题,我可以看到我有点含糊。再次感谢。

4

9 回答 9

41

这是我的建议:

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

祝你好运,-史蒂夫

于 2011-03-03T06:26:09.843 回答
20

您的游戏可能正在耗尽电池电量。我认为这取决于几个原因,其内容如下:

  • 您的应用程序是一个游戏。游戏会很快耗尽电池电量。
  • 您在a 的帮助下进行迭代Thread。您是否限制了 FPS 以使 CPU 跳过不必要的迭代?由于您使用的是 2D,我假设您使用的是SurfaceView. 对于实时游戏来说,60 FPS 就足够了。
  • 当您的应用程序终止时,您不会停止Thread。因此,当您的应用程序不存在时,您会重复代码。
  • 你有没有在 期间做的迭代锁wait();onPause

评论您的游戏漏电的人可能是在您的应用程序未使用时。否则,这会很奇怪,因为 Android Market 上的每个游戏都会消耗电池 -或多或少

于 2011-02-26T00:13:54.807 回答
6

如果您试图衡量“对以前版本的改进”,我认为与另一款游戏进行比较是没有意义的!除非这两款游戏做的完全一样,否则这是不科学的。

相反,我会从源代码管理中获取您应用程序的先前版本,运行它,测量它,然后使用最新代码运行它并再次进行比较。

为了进行比较,您可以例如使用命令行工具“top”(如果您的手机已植根,则肯定在busybox中可用,不确定它是否带有库存手机。可能没有)。这以百分比显示您的进程的 CPU 使用率。

于 2011-02-26T00:03:17.800 回答
4

有一个由高通开发的电池分析器,叫做 Trepn Profiler:https ://developer.qualcomm.com/mobile-development/increase-app-performance/trepn-profiler

于 2014-11-02T20:00:29.180 回答
2

我如何使用来自 Traceview 的数据(即:在游戏的每一帧上花费的 CPU 时间(以毫秒为单位))来确定电池使用情况(如果这可能的话)

理论上,可以通过逐帧查看功耗来推断您的应用程序的电池使用情况。完成此任务的最佳方法是在您的应用程序运行 CPU 密集度最高的操作时(仅)评估给定时间段(例如两秒)内 CPU 的功耗,(此外,可以通过这种方式收集 GPU 功耗也)同时记录 TraceView 数据(例如每秒帧数或每秒翻转数)为您提供给定毫秒内跨 CPU/GPU 的流量。使用此数据,您可以通过运行上述测试几次来准确计算应用程序的平均峰值功耗。

这就是为什么我说这只是理论:有很多变量需要考虑:

  1. 上述测试时运行的其他进程的数量和性质(处理器密集型)
  2. 评估 CPU/GPU 功耗的方法(虽然 PowerTutor 等工具可有效评估功耗,但在这种情况下,评估不会那么有效,因为需要收集带时间戳的功耗数据。此外,大约任何收集功率数据的方法都会引入额外的开销(薛定谔的猫),但这完全取决于您需要/希望的准确度。)
  3. 功耗信息的原因 - 如果您希望为测试或 BETA 测试/评估目的定义应用程序的功耗,那么它是一项可行的任务,具有一定的决心和适当的工具。如果您希望在用户的设备上“在野外”获得有关功耗的有用信息,那么我会说这是合理的但不现实的。所涉及的变量甚至会使最坚定和最专注的研究人员晕倒。您必须在野外测试设备/Android 版本的所有可能组合。此外,正在运行的进程/线程和已安装的应用程序的组合可能无法计算。

我希望这可以为您的问题提供一些见解,尽管我可能已经比需要的更深入了。

-史蒂夫

于 2011-03-07T20:00:21.273 回答
2

对于任何寻找的人,我们一直在使用的一个非常有用的资源是 AT&T 的一个名为 ARO 的免费应用程序。

看看:ARO

它以前对我有帮助,而且我看不到它经常被提及,所以我想我会把它放在这里给任何想看的人。

于 2014-01-30T21:19:35.280 回答
0

“我知道我可以通过设置查看不同应用程序的 %s,但这又是不科学的,因为我从中得到的数字也取决于所有其他应用程序中发生的情况。”

我要做的第一件事是寻找一个已经存在的应用程序,该应用程序具有已知的、一致的电池使用情况,然后您可以将其用作确定应用程序使用情况的参考。

如果没有这样的应用程序,您将不得不希望其他人的回答......如果您成功制作了这样的应用程序,我建议您出售新的“电池使用参考”应用程序,以便其他程序员可以使用它. :)

于 2011-02-26T00:00:25.790 回答
0

我知道这个问题很老而且已经很晚了,但是对于任何来这里寻找解决方案的人,我建议你看看 JouleUnit 测试: http ://dnlkntt.wordpress.com/2013/09/28/how-to-测试能源消耗-on-android-devices/

它集成到 eclipse 中,并为您提供有关您的应用程序消耗多少电池的大量详细信息。

于 2014-11-15T20:33:43.147 回答
0

我知道三个选项可以帮助您进行科学测量:

  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. 使用来自谷歌的 Batterystats 和 Battery Historian。 https://developer.android.com/studio/profile/battery-historian
于 2018-08-20T09:39:31.270 回答