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

时间:2015-06-18 09:40:36

标签: android service gps battery android-fusedlocation

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

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

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

2 个答案:

答案 0 :(得分:1)

我同意Lonni认为问题是拉/长取。考虑到所消耗功率的规模,48%,它不太可能是GPS电路本身。我认为它是CPU。移动处理器除非保持活动状态,否则非常节能。让我解释。有源处理器是移动设备上最耗电的设备。那么处理器如何才能成为最大功率的同时又能够实现高效节能?#34 ;?由于处理器具有高功效特性,我的意思是当处理器没有做任何事情时,它会进入一个非常有效的低功耗状态,其功耗可能比一个小于一个数量级。处于活动状态时。

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

以下是我的建议:

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

以下是更多信息:Battery-safe coding

除此之外:我已经看到了思想泡泡:"为什么某些设备使用的功率低于其他设备?"有些库非常聪明,并且预计编程实践不好并且会做一些变通方法。其他人都很愚蠢。与OS,系统库和线程调度相同。

答案 1 :(得分:0)

我最好的猜测是长时间和拉特的不断取出正在耗尽电池。如果我没记错我几年前所做的事情就是这种情况。

我会说你应该尝试看看你想要的坐标刷新率。也许它不需要每分钟刷新5次以上。在这种情况下,您可以节省大量调用以获取坐标,并确保节省电池。

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

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