如何检查消耗大量电池的进程和服务

How to check processes and services consuming lots of battery

我创建了一个应用程序,该应用程序在某些设备中消耗 48% 的电池,这是电源管理任务中最高的,但在某些设备中它是 5-6%,我是 运行 所有后台服务如果用户已登录,则获取纬度和经度并将其发送到服务器上的时间。但我还通过从应用程序注销来检查它仍然消耗 48%。

使用融合位置获取纬度和经度 api。

所以请告诉我如何解决某些 phone 中的电池消耗问题,以及如何检查哪个进程和服务正在耗尽电池。

我最好的猜测是不断获取经度和纬度正在耗尽电池电量。如果我没记错的话,我几年前做的定位就是这样。

我会说你应该尝试看看你想要的坐标刷新率。也许它不需要每分钟刷新超过 5 次。在那种情况下,您将节省大量获取坐标的调用,并且肯定会节省电池电量。

至于为什么它在某些设备上有所不同,恐怕我不知道。也许使用的 android 版本?

编辑:我不知道 Eclipse 是否可以做到这一点,我认为它也不能。 但是,您可能需要查看这篇论文:http://www.usenix.org/event/usenix10/tech/full_papers/Carroll.pdf

我同意 Lonni 的观点,问题是 lat/long 获取。考虑到 48% 的功耗规模,不太可能是 GPS 电路本身。我认为是 CPU。除非保持活动状态,否则移动处理器的能效非常高。让我解释。有源处理器是移动设备上最耗电的设备。那么,处理器如何既是最大的耗电者又是 "power efficient"?处理器处于 "power efficient",我的意思是当处理器不做任何事情时,它会进入非常高效的低功耗状态,在这种状态下,其功耗可能比处于活动状态时低一个数量级以上。

我的猜测是您让处理器处于活动状态。你想要的是让处理器尽可能空闲。

以下是我的建议:

  • 使用 lat/long 提取之间可能的最长间隔。一个常见的错误是更多的检查意味着更好的响应,但不必要的检查通常不会提高响应,只会让处理器保持活动状态并无缘无故地消耗电力。
  • 永不轮询!轮询使处理器保持活动状态,这会无缘无故地消耗功率。让处理器休眠。
  • 使用中断来处理事件。系统库,例如 sleep(),将处理器置于非活动状态,并使用中断唤醒处理器。
  • 如果库例程已经存在,请不要编写自己的例程。 OS/library 作者非常清楚电源效率的重要性,并已编写尽可能高效的代码。
  • 使您的代码 运行 尽可能快。快速意味着更多的空闲时间,这会使处理器进入更高效的电源状态。例如,如果您可以每 60 秒进行一次 lat/long 检查,并且可以在 10 秒而不是 30 秒内完成处理,那么您有 50 秒的空闲时间与 30 秒的空闲时间。
  • 如果可能,请使用良好的优化编译器和良好的优化移动库。好的编译器可以创建更高效​​、更快的 运行ning 代码。好的库不仅 运行 速度更快,而且它们使用节能技术。
  • 如果您使用大量线程,请使用线程池。创建和拆除线程的成本很高。
  • 确保检查设备上的 API 规格。我可以想象一些 OSs/drivers,例如GPS,将要求设备明确关闭,而其他人将隐式关闭。

这里有更多信息:

旁白:我已经看到了思想泡泡:"Why are some devices using less power than others?"有些库真的很聪明,可以预见不良的编程实践并采取变通办法。其他人是愚蠢的。 OS、系统库和线程调度也一样。