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


74

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

之前和之后,我都收到过有关电池电量耗尽的投诉,我想(科学地)知道我是否进行了任何改进。不幸的是,我没有任何先验数据,因此将性能与某些其他游戏进行比较将非常有用。

我一直在运行Traceview,并将其结果主要用于识别耗时的方法。

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

我知道我可以通过设置查看不同应用程序的%s,但这又不科学,因为我从中获得的数据还取决于所有其他应用程序中发生的事情。我已经阅读了Google的大部分文档,尽管很明显,您应该节省电池电量(偶尔会提示如何使用),但是几乎没有迹象表明我可以衡量我的应用程序的性能如何表演。我要说的最后一件事是更多关于Android电子市场电池耗电的投诉!

提前致谢。


编辑

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


1
不幸的是,我担心cpu指标还不够。例如,每5秒钟通过网络发送一个小的数据包会比一次发送多个数据包然后安静一分钟的消耗更多。同样的情况也可能适用于传感器和GPS
Heiko Rupp

Answers:


41

这是我的建议:

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

祝你好运,-史蒂夫


感谢您是直接回答我的问题的唯一人!将尝试您的建议,然后接受您的答案。
Tom R

Np,根据每个人的回答方式,我担心自己会偏离目标。但是,我认为其他答案将对我们双方都有帮助,这是防止应用程序耗电的许多好技巧,这导致应用程序被用户卸载!
Kingsolmn 2011年

PowerTutor是一款出色的应用程序,对我有很大帮助,但它在应用程序详细信息中未包括GPS使用情况。Power博士是一个很好的补充应用程序。它不显示图形,但在应用程序详细信息中包含更多模块。
LG

20

您的游戏可能会耗尽电池电量。我认为这取决于以下几个原因:

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

人们认为您的游戏正在消耗电池电量,可能是因为您的应用程序未使用。否则,这将是奇怪的,因为在Android Market每场比赛水渠电池-更多更少。


实际上,您提出的问题是我(上一次)已经通过您上一个要点中的确切方法解决的(我想过)的问题:游戏暂停时的CPU使用率是通过屋顶,但是在其中添加了wait()暂停循环解决了该问题。我最近一直在使用Watchdog监视我的所有应用程序,但从未检测到我的应用程序超出阈值。
汤姆R

如果以上问题已解决,我很难看到电池正在耗尽。这些是解决功耗的最现实方法。看看它是这样的-怎么可以你的游戏可能是吃了电池,如果以上几点进行检查?
Wroclai 2011年

6

如果您要评估“对先前版本的改进”,那么我认为与其他游戏进行比较是没有意义的!除非那两个游戏做的准确,否则这是不科学的。

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

例如,您可以使用命令行工具“ top”进行比较(如果您的手机已植根,则在busybox中绝对可用,不确定它是否与普通电话一起提供。可能不是)。这将以百分比显示进程的CPU使用率。


1
这是个好主意,值得一试,但是我不认为我的用户在乎我的应用程序的性能是否有所提高-我认为他们只是不想看到大量的电池消耗而可以与我的应用程序关联。我知道这与我说“科学”时有点矛盾,但是我真正想知道的不是“更好的电池使用率”,而是“什么是合适的”。然后从那里拿走...
Tom R

2
“适当”是相对的。没有人能给你答案。
hackbod 2011年

一款带有浮华图形的优秀游戏充分利用CPU。但这就是所有CPU功能的目的。如果您真的很在意,可以添加“灯光”模式,使视觉效果更静态,但占用的CPU却很少。
EboMike


2

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

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

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

  1. 在上述测试时正在运行的其他进程的数量和性质(处理器密集型)
  2. 评估CPU / GPU上功耗的方法(虽然PowerTutor之类的工具可有效评估功耗,但在这种情况下,评估工作效率不高,因为需要收集带有时间戳的功耗数据。任何收集功率数据的方法都会带来额外的开销(薛定ding的猫),但这严格取决于您要求/期望的精度级别。)
  3. 功耗信息的原因-如果您要为测试或BETA测试/评估目的定义应用程序的功耗,则需要一些确定和适当的工具,这是一个可行的任务。如果您希望在用户设备上获得有关“野外”功耗的可用信息,那么我想说这是合理的,但并不现实。所涉及的变量甚至会使最坚定,最敬业的研究人员昏倒。您必须在野外对设备/ Android版本的每种可能组合进行测试。此外,正在运行的进程/线程与已安装的应用程序的组合可能无法计算。

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

-史蒂夫


2

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

看看:ARO

它以前对我有帮助,我看不到它经常提及,所以以为我会将它放在这里给任何寻找的人。


0

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

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

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


1
问题在于,由于所有内容都在%s中,因此仍然不可靠。举例来说:当我从充电器上拔下Nexus并开始播放应用程序几分钟后,当我查看电池消耗量时,电量消耗超过了50%。但这(希望)并不意味着电池使用率非常高。(对不起,措辞不太好)
Tom R

是的,但是如果那里有一个始终使用一定量mA的应用程序,那么您可以算出与之相关的应用程序使用了多少……例如,参考应用程序的使用率为10%,如果电流为5%,则使用的是mA静态量的一半...同样,如果电流为50%,但为10%,则使用的电流是mA的5倍。就像我说的那样,可能没有这样的应用程序,但是如果您要麻烦的话,它可能值得您花钱。
TimFoolery

3
衡量电池使用情况最准确的方法(除非配备硬件来测量实际功耗),可能是对设备充满电,然后查看应用程序可以运行多长时间,直到电池放电。其他所有内容都是变化精度的近似值。例如-电池使用量目前未考虑OpenGL的功耗。
hackbod 2011年

是的,我也建议这样做。看它持续多长时间,什么也不做。如果持续48小时,则空闲时使用2%。如果您知道电池的mAh,那么也可以将其换算成mAh,而不仅仅是百分比。然后,查看游戏持续多长时间。八个小时(从一两个孩子那里得到一些帮助)每小时将消耗12.5%的电池电量,除非您可能希望删除2%的基本负载。
TimFoolery 2011年

0

我知道这个问题很老而且很晚,但是对于任何来这里寻求解决方案的人,我建议您看一下JouleUnit测试:http ://dnlkntt.wordpress.com/2013/09/28/how-to- 在Android设备上测试能量消耗/

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


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=zh_CN

请注意,对于最近的手机(使用android 6+),它可以在估算模式下运行。如果需要准确的数字,则需要选择设备的列表。检查以下列表的链接:https : //developer.qualcomm.com/software/trepn-power-profiler/faq 您可以分别对应用程序和整个系统进行配置文件。

  1. 使用Google的Batterystats和Battery Historian。 https://developer.android.com/studio/profile/battery-historian
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.