【问题标题】:iOS 9 Location Update Background task after 3 minutes3 分钟后 iOS 9 位置更新后台任务
【发布时间】:2015-11-26 03:31:59
【问题描述】:

我一直在研究这段代码,它使用基本计时器来检查位置更新。然后我让它发送 lat/lng 到服务器。

http://mobileoop.com/background-location-update-programming-for-ios-7 https://github.com/voyage11/Location

通过 XCode 插入和连接时运行良好,但是当我拔下设备并将设备移动时,操作系统似乎总是在 3 分钟后准确地终止后台线程。因此,如果我将计时器设置为每 30 秒运行一次,我将获得大约 6 次更新,直到我将应用程序置于前台。

我读到最大后台执行时间是 3 分钟,但我看到这段代码会在 1 分钟后重置后台任务,所以我不确定为什么会看到这个。

一定有办法解决这个问题。有什么我可以在这里做的吗?

编辑:这对我有帮助:allowsBackgroundLocationUpdates in CLLocationManager in iOS9

【问题讨论】:

  • aherrick 你找到解决方案了吗?我尝试了您编辑中列出的代码,设置allowBackgroundLocationUpdates = YES,但在后台GPS轮询3分钟后我仍然被终止。您是否进行了任何其他更改以使后台 GPS 轮询工作?
  • 嘿!实际上是的。所以我意识到不需要背景杆。我只是简单地将 UIBackgroundModes 设置为 Location。它只是在那个时候起作用

标签: ios xcode cllocationmanager background-process


【解决方案1】:

se:

if ([self.locationManager respondsToSelector:@selector(setAllowsBackgroundLocationUpdates:)]) {
    [self.locationManager setAllowsBackgroundLocationUpdates:YES];
}

这是后台位置跟踪所必需的。

【讨论】:

    【解决方案2】:

    如果其他人遇到此问题,上面列出的 github 存储库中的代码 - https://github.com/voyage11/Location - 最近已更新为 iOS 9 的修复程序,这将允许 GPS 在没有线程的情况下在后台连续轮询3 分钟后终止。

    【讨论】:

      【解决方案3】:

      如果有人在运行这个优秀的库时遇到不可靠的问题,集成到更复杂的应用程序中的其他 xcode 模块中,他们可能会查看后台任务列表 ID 数组的初始化语句并考虑更改 _bgTaskIdList = [NSMutableArray array]; to _bgTaskIdList = [[NSMutableArray alloc]init]; in BackgroundTaskManager.m 直到我这样做我得到了不可靠的行为。有时它有效,有时我得到一个堆栈转储。我发现这是因为 bgTaskList 已被其他数据覆盖,导致访问错误。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-05
        • 2012-06-09
        • 2013-10-03
        相关资源
        最近更新 更多