我有一个在后台使用CLLocationManager的应用程序。它按预期工作。我正在尝试多种方法来优化电池,因为它需要提供接近实时的位置更新。我知道当CLLocationManager配置为在后台运行时,我的应用程序每次发生位置更新时都会唤醒。
所以我正在考虑做类似的事情:当一个位置更新到来并且我的事件处理程序被调用时,我处理该位置,停止位置更新并开始一个计时器,该计时器将在15秒后再次开始位置更新。
只要手机没有睡觉或应用程序处于后台,这项功能就相当不错。当手机进入睡眠状态时,计时器停止。有没有办法避免这种情况?我在想,也许当我停止位置更新时,IOS认为应用程序不再允许在后台运行,所以它会停止所有代码执行,但实际上我不知道发生了什么。有没有人有线索?
编辑:我已经测试了Michal的以下解决方案,它就像一个魅力。即使定时器在15秒内过去,对电池的影响也很大。我的应用程序曾在几小时内消耗50%的电量。现在它甚至不消耗5%。
这是我使用的序列:
答案 0 :(得分:1)
请查看Apple文档的此页面:pausesLocationUpdatesAutomatically。它描述了您可以暂停位置更新,然后恢复它。它仍然没有解决你的问题,那么还有另外一个注意事项:
对于具有使用中授权的应用,暂停到位置更新 结束访问位置更改,直到应用程序再次启动和 能够重新启动这些更新。如果您不希望更新位置 完全停止,请考虑禁用此属性并更改位置 当您的应用移动到时,准确度为kCLLocationAccuracyThreeKilometers 的背景。这样做可以让您继续接收位置 以电源友好的方式更新。
也许您可以使用此提示并执行以下操作:
1)首先根据实际需要设置精确度( NearestTenMeters )
2)当位置更新到来时,处理它,将位置精度设置为 ThreeKilometers ,然后设置15分钟计时器,之后您应该将精度更改回NearestTenMeters