Xamarin - IOS - CLLocationManager - 当手机进入睡眠状态时,计时器停止

时间:2018-04-27 08:23:01

标签: ios xamarin timer cllocationmanager

我有一个在后台使用CLLocationManager的应用程序。它按预期工作。我正在尝试多种方法来优化电池,因为它需要提供接近实时的位置更新。我知道当CLLocationManager配置为在后台运行时,我的应用程序每次发生位置更新时都会唤醒。

所以我正在考虑做类似的事情:当一个位置更新到来并且我的事件处理程序被调用时,我处理该位置,停止位置更新并开始一个计时器,该计时器将在15秒后再次开始位置更新。

只要手机没有睡觉或应用程序处于后台,这项功能就相当不错。当手机进入睡眠状态时,计时器停止。有没有办法避免这种情况?我在想,也许当我停止位置更新时,IOS认为应用程序不再允许在后台运行,所以它会停止所有代码执行,但实际上我不知道发生了什么。有没有人有线索?

编辑:我已经测试了Michal的以下解决方案,它就像一个魅力。即使定时器在15秒内过去,对电池的影响也很大。我的应用程序曾在几小时内消耗50%的电量。现在它甚至不消耗5%。

这是我使用的序列:

  1. 创建一个LocationManager并将其设置为在后台以最准确的方式工作
  2. 当第一个gps修复到达时,将精度设置为3公里并启动一个在15秒内完成的计时器
  3. 当计时器滴答时将精确度设置回最佳状态,并将所有收到的位置上传到服务器。

1 个答案:

答案 0 :(得分:1)

请查看Apple文档的此页面:pausesLocationUpdatesAutomatically。它描述了您可以暂停位置更新,然后恢复它。它仍然没有解决你的问题,那么还有另外一个注意事项:

  

对于具有使用中授权的应用,暂停到位置更新   结束访问位置更改,直到应用程序再次启动和   能够重新启动这些更新。如果您不希望更新位置   完全停止,请考虑禁用此属性并更改位置   当您的应用移动到时,准确度为kCLLocationAccuracyThreeKilometers   的背景。这样做可以让您继续接收位置   以电源友好的方式更新。

也许您可以使用此提示并执行以下操作:

1)首先根据实际需要设置精确度( NearestTenMeters

2)当位置更新到来时,处理它,将位置精度设置为 ThreeKilometers ,然后设置15分钟计时器,之后您应该将精度更改回NearestTenMeters