如果我打开了位置服务,那么当我的应用程序进入后台模式时,它怎么会被杀死?
If I have location services turned on then how can my app get killed when it enters background mode?
我的应用程序在后台时被杀死。
但是,出于位置跟踪的目的,我的应用程序一直在后台保持活动状态。
我已经与遇到此问题的用户交谈过,他们说他们的 locationTracking 设置为“始终”并且他们没有将其关闭。
我假设即使应用程序处于后台(未挂起),它仍然会由于内存警告而被刷新出内存。
我的问题除了内存还有其他原因吗?我查看了 Apple 文档,发现这可能是由于 +80% CPU 在后台持续超过 1 分钟,但这并没有发生。我知道崩溃也可能是应用程序再次启动的原因,但我们的崩溃并没有增加。我们在 locationManager class 中没有看到任何崩溃,我们在后台做的唯一事情就是跟踪位置并进行 API 调用。
我新添加到 locationManager
class 中的唯一内容是以下额外检查:
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)
}
}
如果抛出错误,我就记录下来。否则我只是打一个网络电话。这种额外的检查会减少网络调用,所以我猜它应该更节能。
写的代码有问题
只有当用户更改应用程序的位置(权限)设置时才会发生。显然,这是一条没有进行测试的路径!
我的应用程序在后台时被杀死。
但是,出于位置跟踪的目的,我的应用程序一直在后台保持活动状态。
我已经与遇到此问题的用户交谈过,他们说他们的 locationTracking 设置为“始终”并且他们没有将其关闭。
我假设即使应用程序处于后台(未挂起),它仍然会由于内存警告而被刷新出内存。
我的问题除了内存还有其他原因吗?我查看了 Apple 文档,发现这可能是由于 +80% CPU 在后台持续超过 1 分钟,但这并没有发生。我知道崩溃也可能是应用程序再次启动的原因,但我们的崩溃并没有增加。我们在 locationManager class 中没有看到任何崩溃,我们在后台做的唯一事情就是跟踪位置并进行 API 调用。
我新添加到 locationManager
class 中的唯一内容是以下额外检查:
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)
}
}
如果抛出错误,我就记录下来。否则我只是打一个网络电话。这种额外的检查会减少网络调用,所以我猜它应该更节能。
写的代码有问题
只有当用户更改应用程序的位置(权限)设置时才会发生。显然,这是一条没有进行测试的路径!