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

时间:2011-02-25 23:55:41

标签: java android optimization battery

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

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

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

那么 - 确定应用电池性能的最佳方式是什么,以及什么是良好的基准?

我知道我可以通过设置查看不同应用程序的%s,但这又是不科学的,因为我从中获得的数字也取决于所有其他应用程序中发生的情况。我查看了(大部分)Google的文档,虽然消息很清楚,你应该节省电池(并且它偶尔提供了如何提示),但几乎没有迹象表明我是如何可以衡量我的应用程序的表现。我想要的最后一件事是关于Android Market中电池消耗的更多抱怨!

提前致谢。


修改

感谢您提供所有有用的建议/意见。我真正想知道的是如何使用来自Traceview的数据(即:在游戏的每个帧上花费的CPU时间)来确定电池使用量(如果可能的话) 。回想我原来的问题,我可以看到我有点模糊。再次感谢。

9 个答案:

答案 0 :(得分:41)

这是我的建议:

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

祝你好运, -Steve

答案 1 :(得分:20)

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

  • 您的应用是游戏。游戏很快耗尽电池。
  • 您在Thread的帮助下迭代。您是否限制了FPS以使CPU跳过不必要的迭代?由于您正在使用2D我假设您正在使用SurfaceView。 60 FPS足以进行实时游戏。
  • 当您的应用程序终止时,您停止 Thread。因此,当您的应用程序不活动时,您会重复代码。
  • wait();期间,您有迭代锁定 onPause吗?

人们评论说你的游戏正在泄漏电池可能是因为你的应用程序没有被使用。否则,它会很奇怪,因为Android Market上的每个游戏都会耗尽电量 - 更多更少。

答案 2 :(得分:6)

如果您正在尝试衡量“比以前的版本有所改进”,我认为与其他游戏进行比较并不合理!除非这两个游戏做到了确切的事情,否则这是不科学的。

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

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

答案 3 :(得分:4)

Qualcomm开发了一款名为Trepn Profiler的电池分析器:https://developer.qualcomm.com/mobile-development/increase-app-performance/trepn-profiler

答案 4 :(得分:2)

  

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

理论上,可以通过逐帧查看功耗来推断应用的电池使用情况。实现这一目标的最佳方法是在您的应用运行最耗费CPU的操作时,评估CPU(仅限)在给定时段(例如两秒)内的功耗(此外,可以通过这种方式收集GPU功率使用情况)另外)记录TraceView数据(例如每秒帧数或每秒触发数),在给定的毫秒内为您提供跨CPU / GPU的流量。使用此数据,您可以通过运行上述测试几次来准确计算应用程序的平均峰值功耗。

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

  1. 上述测试(处理器密集型)时运行的其他进程的数量和性质
  2. 评估CPU / GPU功耗的方法(而PowerTutor等工具可有效评估功耗,在这种情况下,由于需要收集带时间戳的用电数据,评估效果不佳。 ,几乎任何收集功率数据的方法都会引入额外的开销(Schrödinger's cat),但这严重依赖于您需要/期望的准确度。)
  3. 功耗信息的原因 - 如果您希望定义应用程序的功耗以进行测试或BETA测试/评估目的,那么这是一项可行的任务,需要一些决心和适当的工具。如果您希望在用户的设备上获得有关“野外”功耗的可用信息,那么我会说这看似合理但不现实。所涉及的可用性甚至会使最坚定和专注的研究人员晕倒。您必须在野外测试设备/ Android版本的每种可能组合。此外,正在运行的进程/线程和已安装的应用程序的组合可能无法估量。
  4. 我希望这能为你的问题提供一些见解,尽管我可能已经深入了解它。

    -Steve

答案 5 :(得分:2)

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

看一看:ARO

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

答案 6 :(得分:0)

  

“我知道我可以看看%s   通过设置不同的应用程序,   但这又是不科学的   我从中获得的数字也取决于   所有其他事情都发生了什么   应用“。

我要做的第一件事就是寻找已经存在已知且一致的电池使用情况的应用,然后您可以将其用作参考来确定应用的使用情况。

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

答案 7 :(得分:0)

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

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

答案 8 :(得分:0)

我知道三种可以帮助您采取科学措施的选择:

  1. 使用为此专门构建的硬件。季风高压电源监控器。 https://msoon.github.io/powermonitor/PowerTool/doc/Power%20Monitor%20Manual.pdf
  2. 下载并在手机上安装Trepn Profiler(高通公司提供的工具)。您将不需要计算机进行报告。报告是实时的,并且可以通过电话实时显示。您可以从以下链接下载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. 使用Google的Batterystats和Battery Historian。 https://developer.android.com/studio/profile/battery-historian