具有“位置”后台模式的iOS长时间运行后台计时器

我想实现长时间运行的后台定时器,定时向服务器发送用户的位置信息。

为此,我为UIBackgroundModes设置了location模式,并在应用程序转到后台时调用beginBackgroundTaskWithExpirationHandler 。 而对于CLLocationManager ,我使用startUpdatingLocation方法(不想使用重大更改,因为我需要高精度的位置)。

但是在应用程序转到后台大约26分钟后,停止向服务器发送位置。 但该应用程序不会崩溃,所以在我把应用程序放到前台后,它可以恢复它的计时器。

26分钟是从实验,与iOS 6.1,iPhone 5。

这里有一些问题,

  1. 我不明白为什么在26分钟不到10分钟后暂停,这被称为后台任务的时间限制。

  2. 在16分钟之前, backgroundTimeRemaining方法返回double最大值。 但16分钟后从600下降,10分钟后暂停后台任务。

我已经试过在期满处理程序里面调用beginBackgroundTaskWithExpirationHandler ,但是没用。

如果有谁对这个问题有线索,将不胜感激。

https://github.com/voyage11/Location

使用这个代码。你可以设置你想调用它的时间间隔。 我已经尝试了很多代码,但我发现这是最准确和最less的电池问题。这也是背景位置服务真棒。 🙂

如果您已成功设置UIBackgroundModes ,则应用程序可以在移动时在后台运行很长时间。 但是,如果你停止超过10分钟(也许更多),应用程序将被系统暂停。 如果位置更新,您的应用程序将会清醒,但是这个清醒时间会很短,所以您必须使用beginBackgroundTaskWithExpirationHandler方法来处理位置更新。