0

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

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

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

4

2 回答 2

1

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

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

以下是我的建议:

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

以下是更多信息:电池安全编码

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

于 2015-06-19T17:02:15.100 回答
0

我最好的猜测是,不断获取 long 和 lat 正在耗尽电池。如果我没记错的话,几年前我在定位方面做了什么。

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

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

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

于 2015-06-18T11:14:23.160 回答