具有“位置”后台模式的iOS长时间运行后台计时器
我想实现长时间运行的后台定时器,定时向服务器发送用户的位置信息。
为此,我为UIBackgroundModes
设置了location
模式,并在应用程序转到后台时调用beginBackgroundTaskWithExpirationHandler
。 而对于CLLocationManager
,我使用startUpdatingLocation
方法(不想使用重大更改,因为我需要高精度的位置)。
但是在应用程序转到后台大约26分钟后,停止向服务器发送位置。 但该应用程序不会崩溃,所以在我把应用程序放到前台后,它可以恢复它的计时器。
26分钟是从实验,与iOS 6.1,iPhone 5。
这里有一些问题,
-
我不明白为什么在26分钟不到10分钟后暂停,这被称为后台任务的时间限制。
-
在16分钟之前,
backgroundTimeRemaining
方法返回double最大值。 但16分钟后从600
下降,10分钟后暂停后台任务。
我已经试过在期满处理程序里面调用beginBackgroundTaskWithExpirationHandler
,但是没用。
如果有谁对这个问题有线索,将不胜感激。
https://github.com/voyage11/Location
使用这个代码。你可以设置你想调用它的时间间隔。 我已经尝试了很多代码,但我发现这是最准确和最less的电池问题。这也是背景位置服务真棒。 🙂
如果您已成功设置UIBackgroundModes
,则应用程序可以在移动时在后台运行很长时间。 但是,如果你停止超过10分钟(也许更多),应用程序将被系统暂停。 如果位置更新,您的应用程序将会清醒,但是这个清醒时间会很短,所以您必须使用beginBackgroundTaskWithExpirationHandler
方法来处理位置更新。