我遇到了一个问题,在一个跟踪应用,但只有在iOS 11。应用程序被动地记录在一定条件下的背景你的全球定位系统位置。
在iOS 11上发生的问题是,看似随机的CLLocationManager停止报告全球定位系统事件的时间从10到900+秒不等。
位置管理器设置如下:
let locationManager = CLLocationManager()
locationManager.allowsBackgroundLocationUpdates = true
locationManager.pausesLocationUpdatesAutomatically = false
locationManager.startMonitoringSignificantLocationChanges()
locationManager.desiredAccuracy = 10
locationManager.activityType = .automotiveNavigation认为线程CoreLocation正在为所有回调管理和使用可能会带来负担。
我已经尝试过委托一个不同的线程进行处理,所以这个应用程序不会绑定CoreLocations资源。这是使用如下所设置的操作队列完成的:
let queue = OperationQueue()
queue.maxConcurrentOperationCount = 1
queue.qualityOfService = .userInitiated使用该操作队列进行回调:
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
queue.addOperation {
// process locations
}
}引入操作队列无助于避免这些空白,但是它确实做到了这样,当间隙发生时,位置管理器使用相同的时间戳报告一堆(不同的)位置。
具有相同时间戳的位置并不是所有丢失的位置,也就是说,如果间隔为200秒,我可能只能得到15个具有相同时间戳的位置。
我希望这里有人能告诉我为什么会发生这种情况,以及我能做些什么来避免这些差距。
提前谢谢。
发布于 2018-06-26 19:47:42
经过大量的回顾、试验和与苹果公司的讨论,我们现在似乎已经解决了这个问题。尽管苹果只有在跟踪开始时应用程序位于前台时才能保证GPS跟踪背景。我们应用的修补程序正在更改以下内容:
locationManager.startMonitoringSignificantLocationChanges()..。至:
locationManager.stopMonitoringSignificantLocationChanges()
locationManager.startMonitoringSignificantLocationChanges()理论上说,应用程序的设置在启动时应用于“监视”设置时会损坏。如果首先将“监视”设置设置为false,然后将其设置为true,则不会发生损坏。
这一修复是在应用程序商店的应用程序中为数百人,并跟踪在后台工作很好。
https://stackoverflow.com/questions/46495288
复制相似问题