ios - 如果我打开了位置服务,那么我的应用程序在进入后台模式时如何被杀死?
问题描述
我的应用程序在后台被杀死。
但是,出于位置跟踪的目的,我的应用程序始终在后台保持活动状态。
我已经与遇到此问题的用户交谈过,他们说他们的 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)
}
}
如果抛出错误,那么我只是记录它。否则我只是打一个网络电话。这个额外的检查会减少网络调用,所以我猜它应该更节能。
解决方案
写的代码有问题。
仅当用户更改应用程序的位置(权限)设置时才会发生这种情况。显然,这是一条没有针对它进行测试的路径!
推荐阅读
- javascript - 创建自定义多面体几何的问题
- javascript - 当我的应用程序尝试对 img 标记进行 OCR 时,Tesseract.js 失败并出现一个钝错误
- macos - 使用波前材质文件颜色参数 Kd 在 MetalKit 子网格中设置顶点颜色的最佳方法是什么?
- mapping - Informatica - 在工作流中运行并行映射
- machine-learning - 将时间序列数据集中到单个微服务中以进行跨实体查询
- yocto - 将 DISTRO_FEATURES 添加到图像 bitbake 配方
- java - 无法从 Java Netbeans 连接到 Mariadb
- javascript - Javascript 任意单击多个实例的值
- angular - 是否可以为谷歌地图标记剪辑图像
- sql-server - sql server - 如果id中有重复值,则将两列的数据合并到另一列