首页 > 解决方案 > 如果我打开了位置服务,那么我的应用程序在进入后台模式时如何被杀死?

问题描述

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

但是,出于位置跟踪的目的,我的应用程序始终在后台保持活动状态。

我已经与遇到此问题的用户交谈过,他们说他们的 locationTracking 设置为 Always 并且他们没有将其关闭。

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

我的问题除了记忆之外还有其他原因吗?我查看了 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)
    }
}

如果抛出错误,那么我只是记录它。否则我只是打一个网络电话。这个额外的检查会减少网络调用,所以我猜它应该更节能。

标签: ioscore-locationenergyios-background-mode

解决方案


写的代码有问题。

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


推荐阅读