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

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

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

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

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

我知道我可以通过设置来查看不同应用程序的%s,但这又是不科学的,因为我从中得到的数字也取决于所有其他应用程序中发生的情况。 我已经浏览了Google的大部分文档,尽pipe消息很明显,你应该节省电池(偶尔也会提示如何),但我几乎没有什么迹象表明我可以测量我的应用程序执行。 我想要的最后一件事是在Android Market上更多地抱怨电池漏电!

提前致谢。


编辑

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

这是我的build议:

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

祝你好运, – 史蒂夫

有可能你的游戏正在耗尽电池。 我相信这取决于几个原因,其内容如下:

  • 你的应用程序是一个游戏 。 游戏快速消耗电池。
  • 你正在迭代 Thread帮助。 你有限制的FPS,使CPU跳过不必要的迭代? 由于你正在使用2D,我假设你正在使用SurfaceView 。 60 FPS将足够实时游戏。
  • 应用程序终止时,不要停止 Thread 。 因此,当您的应用程序不活时,您重申代码。
  • 你有一个迭代locking wait();onPause

当你的应用程序没有被使用的时候,那些评论说你的游戏正在泄漏电池的人可能就是这样做的。 否则,它会变得更加奇怪,因为Android Market上的每款游戏都会耗尽电池电量 – 或多或less。

如果你试图衡量“先前版本的改进”,我认为与其他游戏相比并不合适。 除非这两个游戏做的确切,否则这是不科学的。

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

为了比较,你可以使用命令行工具“top”(如果你的手机已经扎根,那么在busybox中肯定是可用的,不知道它是否配备了股票手机,可能不会)。 它以百分比显示了你的进程的CPU使用率。

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

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

从理论上讲,通过逐帧查看功耗,可以推断出您的应用的电池使用情况。 实现这一目标的最佳方法是在您的应用程序运行CPU占用最高的操作时,评估CPU(仅)在特定时间(例如2秒)内的功耗(此外,GPU功耗可以通过这种方式收集)同时loggingTraceView数据(例如每秒帧数或每秒触发器),让您在给定的毫秒内通过CPU / GPU的stream量。 使用这些数据,您可以通过几次运行上述testing来准确计算应用程序的平均峰值功耗。

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

  1. 在上述testing时运行的其他进程的数量和性质(处理器密集型)
  2. 评估CPU / GPU功耗的方法(PowerTutor等工具对于功耗评估是有效的,在这种情况下,评估效果不佳,因为需要收集带时间标记的功耗数据。任何收集电力数据的方法都会引入额外的开销( 薛定谔的猫 ),但这严格取决于您所需要的精度水平。)
  3. 功耗信息的原因 – 如果您正在寻找定义您的应用程序的功耗testing或BETAtesting/评估的目的,那么这是一个可行的任务与一些决心和适当的工具。 如果您正在寻找获得关于“在野外”的功耗的有用信息,则在用户的设备上,那么我认为这是合理的,但不现实。 所涉及的各种问题甚至会让最坚定和专注的研究人员变得微不足道。 你将不得不在每一个可能的设备/ Android版本的组合进行testing。 此外,正在运行的进程/线程和已安装应用程序的组合可能无法估量。

我希望这能对你的问题提供一些见解,虽然我可能已经深入了解了这个问题。

史蒂夫

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

看一看: ARO

它之前帮了我,我没有看到它经常提到,所以想我会把它放在这里为任何人看。

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

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

如果没有这样的应用程序,你将不得不希望从别人的答复…如果你是成功的这样的应用程序,我会build议出售你的新的“电池使用参考”的应用程序,以便其他程序员可以使用它。 🙂

我知道这个问题已经老了,已经晚了,但是对于任何来这里寻找解决scheme的人,我build议你看看JouleUnittesting: http ://dnlkntt.wordpress.com/2013/09/28/how-to- testing能量消耗上Android的设备/

它集成到eclipse中,并为您提供关于您的应用消耗多less电量的大量细节。