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 已被其他数据覆盖,导致访问错误。
我一直在深入研究这段代码,它使用基本计时器来检查位置更新。然后我让它发送 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 已被其他数据覆盖,导致访问错误。