我想实现长时间运行的后台计时器,该计时器将用户的位置定期发送到服务器。
为此,我将location
设置为UIBackgroundModes
模式,并在应用程序进入后台时调用beginBackgroundTaskWithExpirationHandler
。
对于CLLocationManager
,我使用startUpdatingLocation
方法(不想使用重大更改,因为我需要高精度的位置)。
但是在应用程序进入后台运行大约26分钟后,它停止了向服务器发送位置信息的操作。但是该应用程序并未崩溃,因此在我将该应用程序置于前台之后,它可以恢复其计时器。
使用iOS 6.1,iPhone 5进行实验需要26分钟。
这里有一些问题,
backgroundTimeRemaining
方法返回双倍最大值。但是16分钟后,它从600
减小,因此它在10分钟后挂起了后台任务。 我已经尝试在过期处理程序中调用
beginBackgroundTaskWithExpirationHandler
,但是没有用。如果有人对这个问题有所了解,将不胜感激。
最佳答案
https://github.com/voyage11/Location
使用此代码。您可以设置要调用的时间间隔。我尝试了许多代码,但我发现这是最准确,最少的电池问题。这对于后台定位服务也很棒。 :)