【问题标题】:How to check processes and services consuming lots of battery如何检查消耗大量电池的进程和服务
【发布时间】:2015-09-03 21:12:51
【问题描述】:

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

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

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

【问题讨论】:

  • “消耗”48% 的电池需要多长时间?你的问题不太清楚,你可能想改一下;)
  • @LonniBesançon 我已经检查了设置>电池/电源管理>电池使用情况>在我的屏幕上它显示了所有正在消耗电池的应用程序以及它们在那里消耗了多少我看到了我的应用名称和 48%
  • 您可能想尝试过滤一些对获取纬度和经度的服务的无用调用,然后不是吗?我不知道为什么有些手机会比其他手机使用更多,尤其是更多,但这可能与他们没有安装的 android 版本有关?
  • @LonniBesançon 但我是跟踪员工当前位置的服务,所以我无法退出服务,显示大量消耗的设备具有与我相同的 android 版本,并且在我的手机上显示为 5%
  • 我从来没有说过你应该退出服务。我说你可以过滤一些电话。就像你真的需要每 1/1000 秒调用一次吗?还是每 4 秒调用一次就足够了?

标签: android service gps battery android-fusedlocation


【解决方案1】:

我同意 Lonni 的观点,即问题在于 lat/long 获取。考虑到 48% 的功耗规模,它不太可能是 GPS 电路本身。我猜是CPU。移动处理器非常节能,除非它们保持活动状态。让我解释。主动处理器是移动设备上最耗电的设备。那么,处理器如何在“节能”的同时成为最大的耗电者呢?处理器“节能”是指当处理器不做任何事情时,它会进入一个非常高效的低功耗状态,其功耗可能比处于活动状态时低一个数量级以上。

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

以下是我的建议:

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

这里有更多信息:Battery-safe coding

旁白:我已经看到了这样的想法:“为什么有些设备比其他设备耗电少?”一些库非常聪明,可以预见不良的编程实践并采取变通方法。其他人是哑巴。操作系统、系统库和线程调度也是如此。

【讨论】:

    【解决方案2】:

    我的最佳猜测是,不断获取 long 和 lat 会耗尽电池电量。如果我没记错的话,几年前我在定位方面是这样的。

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

    至于为什么在某些设备上会有所不同,恐怕我不知道。可能是用的android版本?

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

    【讨论】:

    • 我每 30 秒获取一次 lat_long ......如何在 eclipse 中检查我的应用程序中哪个进程正在消耗电池?
    • 论文有帮助吗?也许你想过滤掉更多的 lat long fetching
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多