iOS 减少后台定位电池消耗

19
我正在开发一款iOS应用程序,需要在后台运行位置服务。我已经测试了“显著位置变化”,但这并不准确。确切的位置是完美的,但这会消耗太多的电池寿命,使应用程序无法使用。
为了解决这个电池问题,我想到了一个解决方案,即在`UIApplication:beginBackgroundTaskWithExpirationHandler:`中使用`NSTimer`。 这将打开位置服务,然后立即关闭,触发位置更新并重置`backgroundTimeRemaining`。
然而,即使每9分钟只打开一秒钟的位置服务,此解决方案仍会耗费大量电池寿命——每3-4小时耗费15%至20%的电量。 应用程序除了这一个计时器以外,在后台没有运行任何其他东西。 我甚至尝试在进入后台时释放所有视图,以确保没有东西占用电池。
在Instruments工具中检查时,我发现应用程序在此等待状态下使用0.0%的CPU和14 MB的内存。 现在我有点困惑了,不知道原因是什么,特别是每540秒运行1秒钟GPS与全天运行相比,并没有明显减少电池消耗。
我开始整理以下问题,可能有助于解决问题,希望有人能提供答案或想法...
  • 运行这种方式的应用程序是否会阻止手机进入某种低功耗模式?
  • 启动GPS是否会使用大量电力?
  • 关闭后,GPS是否会持续运行一段时间?

1
@GregularExpressions - 听起来是对的。我不认为GPS硬件在上电后的第一秒钟能做什么。接收器必须从多个卫星获取完整的消息帧才能计算其位置,而GPS信号的带宽/比特率非常低(否则小型低功耗接收器将不可能存在)。即使被指示关闭,GPS系统可能会一直运行,直到获得一个定位后才关闭。 - Martin James
那些低功耗 GPS 芯片的接收器本来就很差。 - Martin James
2
你解决了你的问题吗? - knagode
它并没有解决问题,仍然是一个正在进行的研究。我似乎已经确定了这个过程会阻止iPhone进入深度睡眠,而不是我的GPS连接直接导致问题,但所有其他进程(如邮件、iCloud等)仍在全功率运行。 - Andy
2
@Andy:你两年后解决了吗 :) ? 谢谢。 - androniennn
1个回答

2

是的,WWDC 2011会议第312场“使用Instruments进行iOS性能和功耗优化”在大约45分钟时涵盖了这个问题。

当你使用GPS结束后,它可以保持活动状态长达10秒,并且处于活动状态的无线电会唤醒设备并防止设备进入“睡眠”状态。

您可以使用Instruments中的“Energy Diagnostics”模板来查看这一点。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接