如果我打开了定位服务,那么我的应用程序在进入后台模式时如何被终止?



我的应用程序在后台运行时被杀死。

但是,我的应用程序始终在后台保持活动状态,以便进行位置跟踪。

我已经与遇到此问题的用户交谈过,他们说他们的位置跟踪设置为"始终",并且他们尚未将其关闭。

我假设即使应用程序处于后台(未挂起(,它仍然可能由于内存警告而被刷新出内存。

除了记忆之外,我的问题还有其他原因吗?我查看了Apple文档,发现这可能是由于后台超过1分钟的+80%CPU造成的,但这并没有发生。我知道崩溃也可能是应用程序再次启动的原因,但我们的崩溃并没有增加。我们在 locationManager 类中没有看到任何崩溃,我们在后台唯一要做的就是跟踪位置并进行 API 调用。

我新添加到locationManager类的唯一内容是以下额外检查:

private func checkLocationAccuracy(from location: CLLocation) throws {
let ageOfLocation = -location.timestamp.timeIntervalSinceNow
if ageOfLocation >= maximumAcceptedStale {
throw LocationAccuracyError.stale(secondsOld: ageOfLocation)
}
if location.horizontalAccuracy <= 0 {
throw LocationAccuracyError.invalid
}
if location.horizontalAccuracy > MaximumAcceptedHorizontalAccuracy{
throw LocationAccuracyError.lowAccuracy(metersOff: location.horizontalAccuracy)
}
}

如果抛出错误,那么我只是记录它。否则,我只是进行网络调用。这种额外的检查将减少网络调用,所以我猜它应该更有效的能源。

编写的代码有问题。

仅当用户对应用的位置(权限(设置进行更改时,才会发生这种情况。 显然,这是一条没有进行测试的路径!

最新更新