iOS 9 3 分钟后位置更新后台任务

iOS 9 Location Update Background task after 3 minutes

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

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

插入电源并通过 XCode 连接时运行良好,但是当我拔下电源并移动设备时,OS 似乎总是在 3 分钟后恰好终止后台线程。因此,如果我将计时器设置为每 30 秒 运行,我将获得 ~6 次更新,直到我将应用程序调到前台。

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

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

编辑:这对我有帮助:

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

se:

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

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

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