我的安卓应用会消耗电量吗?

74
我正在为Android开发游戏,使用SurfaceView和标准的2D绘图API。最初发布游戏时,我做了很多愚蠢的事情,比如每帧重新绘制九宫格和文本等。现在我已经通过绘制位图对象并在需要时将它们绘制到每帧中进行了优化。
之前我收到过有关电池耗电量的投诉,因此在修改后,我想知道(从科学的角度)是否有所改善。不幸的是,我没有以前的数据可供参考,因此将性能与其他游戏进行比较将非常有用。
我一直在运行Traceview,并主要利用其结果来识别消耗CPU时间的方法。
那么,如何确定我的应用程序的电池性能,有什么好的基准? 我知道我可以通过设置查看不同应用程序的百分比,但这也是不科学的,因为这个数字还取决于其他所有应用程序的情况。我查阅了(大部分)谷歌的文档,虽然文档明确表示应该节省电池(并不时给出提示),但很少表明如何测量我的应用程序的表现如何。我最不想看到的是在Android市场上更多的电池耗尽投诉!
谢谢你的帮助和建议。我真正想知道的是如何使用来自Traceview的数据(即游戏每帧消耗的CPU时间(以毫秒为单位))来确定电池使用情况(如果可能的话)。回顾一下我的原始问题,我可以看出我有点含糊不清。再次感谢。

2
很遗憾,我担心仅凭CPU指标是不够的。例如,每5秒通过网络发送一个小数据包将比一次发送多个数据包然后静默一分钟更耗费资源。同样的情况可能也适用于传感器和GPS。 - Heiko Rupp
9个回答

41

以下是我的建议:

在开发应用程序时(有时以<25ns的频率轮询传感器),我会使用PowerTutor观察电量消耗。你可以试试看,它听起来可能正是你要找的,这个应用程序能够告诉你正在使用多少毫瓦、焦耳或相对于系统其余部分的使用情况。此外,结果会按CPU、WiFi、显示器等(其他已安装的无线电设备)分类详细列出。唯一的问题是它是为特定型号的手机编写的,但我在EVO 4G、Galaxy S(Sprint Epic)和Hero上使用它非常成功。

祝好运, -Steve


感谢您作为唯一一个直接回答我的问题的人!我会尝试您建议的方法,然后接受您的答案。 - Tom R
不,我担心我的回答会偏离目标,因为其他人的回答都不一样。但是,其他的回答应该对我们都有帮助,因为它们提供了许多好的提示,可以避免应用程序成为能耗大户,从而导致用户卸载应用程序! - Kingsolmn
PowerTutor是一款非常好用的应用程序,对我帮助很大,但它在应用程序详细信息中不包括GPS使用情况。Dr Power是一个很好的补充应用程序,可以解决这个问题。它虽然没有显示图表,但在应用程序详细信息中包含了更多的模块。 - L. G.

20

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

  • 您的应用程序是一个游戏。游戏会快速耗光电池。
  • 您正在使用Thread迭代。您是否限制了FPS以使CPU跳过不必要的迭代?由于您正在使用2D,我假设您正在使用SurfaceView。 60 FPS足以满足实时游戏需求。
  • 当您的应用程序终止时,您没有停止Thread。因此,当您的应用程序不再运行时,代码会重复执行。
  • 您是否拥有一个在onPause期间进行wait();iterate lock

那些评论说您的游戏会导致电量泄漏的人可能是针对您的应用程序未被使用时。否则,这将很奇怪,因为Android市场上的每个游戏都会消耗电池 - 多或少。


实际上,你提出的问题是我一段时间前就已经通过你最后一个要点中的方法解决了:当游戏暂停时,CPU使用率飙升,但在暂停循环中添加wait()函数可以解决这个问题。最近我一直在使用Watchdog监控我的所有应用程序,而我的应用程序从未被检测到超过阈值。 - Tom R
如果上述问题已经解决,我很难看出电池是否正在耗尽。这些点是解决功耗的最现实方法。可以这样想 - 如果检查了上述要点,你的游戏怎么可能会耗电呢? - Wroclai

6
如果您想衡量“相比之前版本的改进”,我认为与另一个游戏进行比较是没有意义的!除非这两个游戏完全一样,否则此方法可信度极低。
相反,我会从源代码控制中获取您应用程序的上一个版本,运行它,对其进行测量,然后再次运行最新的代码并进行比较。
为了进行比较,您可以例如使用命令行工具“top”(如果您的手机已经root,那肯定有此工具;如果未root,则不确定是否有)。该工具以百分比显示您的进程的CPU使用情况。

1
这是一个很好的想法,值得一试,但我认为我的用户并不关心我的应用程序是否提高了性能 - 我认为他们只是不想看到与我的应用程序相关联的巨大电池耗电量。我知道这有些矛盾,因为我之前说过“科学”,但我真正想知道的不是“什么是更好的电池使用”,而是“什么是合适的”。然后从那里开始…… - Tom R
2
“适当”是相对的。没有人能为此给出一个答案。 - hackbod
一个好的游戏,具有华丽的图形,将会充分利用 CPU。但这正是所有 CPU 计算能力的用途。如果你真的很担心,可以添加一个“轻量级”模式,使视觉效果更加静态化,CPU 费用只有一小部分。 - EboMike

4

2
如何利用来自Traceview的数据(例如:游戏中每帧所花费的CPU时间)来确定电池使用情况(如果可能的话)?
理论上,通过逐帧查看功率消耗,可以推断出应用程序的电池使用情况。最好的方法是,在您的应用程序运行最消耗CPU资源的操作时,评估给定时间段(比如两秒钟)内CPU(仅CPU)的功率消耗(此外,也可以通过这种方式获得GPU功率使用情况),同时记录TraceView数据(例如每秒帧数或每秒浮点运算次数),以便了解在给定毫秒内CPU/GPU的流量。使用这些数据,您可以通过多次运行上述测试来准确计算应用程序的平均峰值功耗。
但是,我之所以说这只是理论,是因为有许多变量需要考虑:
  1. 以上测试时运行的其他进程数量和性质(处理器密集型)
  2. 评估CPU/GPU功耗的方法(虽然像PowerTutor这样的工具对于评估功耗很有效,但在这种情况下,由于需要收集时间戳功耗使用数据,评估效果不会那么好。此外,任何收集功率数据的方法都会引入额外的开销(Schrödinger's cat),但这严格取决于您所需/期望的精度水平。)
  3. 功耗信息的原因-如果您想定义应用程序的功耗以进行测试或BETA测试/评估,则可以通过一些决心和适当的工具完成。如果您想获得关于用户设备上功耗消耗的可用信息“在野外”,那么我会说这是可能的,但不现实。涉及的变量甚至会使最坚定和专注的研究人员晕厥。您将不得不在野外测试每种可能的设备/Android版本组合。此外,正在运行的进程/线程和已安装应用程序的组合可能是无法计算的。

我希望这提供了一些有关您的问题的见解,尽管我可能深入其中超过了需要的程度。

-史蒂夫

2
任何需要的人,我们一直在使用的一个极其有用的资源是AT&T提供的免费应用程序ARO。

看看这个:ARO

它曾经帮助过我,但我很少见到有人提到它,所以我想在这里分享给需要的人。


0

0

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

  1. 使用专门为此构建的硬件。Monsoon HIGH VOLTAGE POWER MONITOR。 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. 使用Google提供的Batterystats和Battery Historian。 https://developer.android.com/studio/profile/battery-historian

0
“我知道我可以通过设置查看不同应用程序的%s,但这又是不科学的,因为我从中得到的数字也取决于其他所有应用程序中正在发生的事情。”
“首先,我会寻找一个已知的、一致的电池使用量的应用程序,然后你就可以将其作为参考来确定你的应用程序的使用量。”
“如果没有这样的应用程序,你将不得不希望从其他人那里得到答案……如果你成功地制作出这样的应用程序,我建议你销售你的新的“电池使用参考”应用程序,以便其他程序员可以使用它。 :)”

1
问题在于,由于所有内容都是以%s的形式呈现,这仍然不可靠。例如:当我从充电器拔出我的Nexus并开始玩几分钟的应用程序后,当我查看电池消耗时,它超过50%。但(hopefully)这并不意味着电池使用率非常高。(抱歉,这句话表达得不太好) - Tom R
没错,但如果有一个应用程序始终使用一定数量的毫安,那么您就可以计算出您的应用程序相对于它使用了多少...例如,参考应用程序为10%,而您的应用程序为5%,则您使用了一半静态毫安数...同样,如果您在50%,但它只有10%,那么您使用的毫安数是它的5倍。就像我说的,可能没有这样的应用程序,但如果您打算费心制作,那么这可能是值得的。 - TimFoolery
3
除了具备测量实际功率吸收的硬件之外,最准确的测量电池使用的方法可能是完全充电您的设备,然后观察您的应用可以运行多长时间,直到电池耗尽。其他所有方法都是不同准确度的近似值。例如,目前的电池使用情况没有考虑到OpenGL的功率消耗。 - hackbod
是的,我也建议这样做。看看它在什么都不做的情况下能持续多久。如果它能持续48小时,那么它在空闲时使用2%。如果您知道电池的mAh,则也可以将其转换为mAh,而不仅仅是百分比。然后,看看在玩游戏时它能持续多久。八个小时(可以从一两个孩子那里获得帮助)每小时会使用12.5%的电池电量,但您可能需要删除那个2%的基本负载。 - TimFoolery

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接