为啥我的 Android 应用程序会耗尽电池电量?

Posted

技术标签:

【中文标题】为啥我的 Android 应用程序会耗尽电池电量?【英文标题】:Why does my Android application drain battery?为什么我的 Android 应用程序会耗尽电池电量? 【发布时间】:2013-05-13 23:09:28 【问题描述】:

我编写了一个简单的应用程序,它在屏幕上显示一些文本和一些图形。我使用的是 Nexus 7,这是用于安装的,因此需要每天连续运行 12 小时。然而,尽管插上电源并充电,我的应用程序在大约 8 小时(10-15% / 小时)内将电池完全耗尽。

除了不经常更改的文本和图形之外,我的应用程序还做了两件事:

它使屏幕保持全亮状态(通过WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);和

它打开两个DatagramSockets,一个充当UDP客户端,一个充当UDP服务器。这些套接字都由我正在使用的库OSCP5 自动打开和管理。它是开源的,所以我可以根据需要破解它,尽管越少越好。 (KISS.)

我测试了 Nexus 7 的电池续航时间,没有运行任何应用程序,屏幕处于全亮度状态,每 29 分钟拨动一下以防止它进入睡眠状态,持续几个小时,完全没有电池消耗。所以,迹象似乎指向插座。我在这些套接字上没有频繁的通信,它们每分钟接收大约几 KB(基于用户与安装的另一部分的交互)。

我能做些什么,特别是对插座或任何其他常规测试,以尽量减少或消除电池消耗?我只需要打完 12 个小时,但在插上电源的同时保持充满电似乎不是什么艰巨的任务……

【问题讨论】:

【参考方案1】:

然而,尽管插上电源并充电,我的应用程序在大约 8 小时(10-15% / 小时)内将电池完全耗尽。

Nexus 7 插入了什么?我认为它可以利用大多数平板电脑(android + iPad)所需的高速充电 USB 端口。如果您将其插入普通 USB 端口,我可以看到您的结果更有可能。

所以,迹象似乎指向插座。

他们当然是候选人,但由于 WiFi 收音机可能会在设备充电时说打开,我会有点惊讶。对我来说,这感觉像是一个 CPU 问题,你在忙着等待什么的,而不是阻塞。

我能做些什么,特别是插座或任何其他常规测试,以尽量减少或消除电池消耗?

我会看看 Traceview 是否指出您在哪里消耗了大量 CPU 时间。我会调查充电端口问题。我会修改您的应用程序以模拟套接字工作并尝试查看您的问题是否仍然存在 - 如果确实存在,那么问题不在于套接字。

【讨论】:

我已将 nexus 插入 USB 浪涌保护器(这个:belkin.com/us/p/P-BZ103050-TVL)和标准 iPhone 充电器,结果相同。不幸的是,我没有 nexus 附带的充电器。我不熟悉您所说的“高速充电USB端口”;谷歌返回了一些结果,但似乎没有一个是完全正确的。你能详细说明一下吗?并且,我会检查其他调试建议,谢谢。 更多谷歌搜索将我指向此页面:discussions.apple.com/docs/DOC-3511,其中显示 iPhone 充电器允许高达 1A 的电流通过。听起来应该有更好的选择,因为 iPad 充电器允许 2.1A。搜索“2A USB 充电器”返回了一些不错的结果,将尝试其中一个并报告。 @ericsoco:是的,我指的是 2A 端口。除了一些 AC->2A USB 适配器之外,您还会发现一些有源集线器提供它们。【参考方案2】:

嗯,保持屏幕全亮确实会降低电量。 GPS也会这样做;我认为这是两个最大的功耗。

保持网络无线电繁忙和保持 cpu 繁忙也会消耗电力。我希望您没有忙于等待您的任何软件。

除此之外,我只能建议您使用平板电脑可能随附的大功率充电器。 USB 数据端口的电流限制为 500mA,而且我使用过不止一种设备,这些设备可能需要更多设备才能保持电池电量。

【讨论】:

【参考方案3】:

三个月和无休止的头桌敲打之后,原来罪魁祸首是我的 USB 运行。总长度约为 20'-25',并且该长度正在衰减一直通过线路的功率。解决方案:powered USB hub。

因此,答案最终与 Android 或编程毫无关系。对不起,所以。

【讨论】:

以上是关于为啥我的 Android 应用程序会耗尽电池电量?的主要内容,如果未能解决你的问题,请参考以下文章

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

Android 定位服务耗尽电池 - 融合定位 API

Android 调试 -> 电池耗尽

如何了解我的 Android 应用在用户设备上消耗了多少电量?

使用 gps 捕获经纬度而不会耗尽电池电量

Google Fit 应用程序如何在不耗尽电池电量的情况下一直测量步数?