我一直在研究这个使用基本计时器检查位置更新的代码。然后我将它发送到服务器。
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
答案 0 :(得分:6)
SE:
if ([self.locationManager respondsToSelector:@selector(setAllowsBackgroundLocationUpdates:)]) {
[self.locationManager setAllowsBackgroundLocationUpdates:YES];
}
这是后台位置跟踪所必需的。
答案 1 :(得分:2)
如果有其他人遇到此问题,上面列出的github repo上的代码 - https://github.com/voyage11/Location - 最近已经更新了iOS 9的修复程序,这将允许GPS在后台连续轮询线程在3分钟后终止。
答案 2 :(得分:0)
如果在运行这个非常优秀的库时遇到了不可靠的问题,在更复杂的应用程序中集成到其他xcode模块中,他们可能会查看后台任务列表Id数组的初始化语句,并考虑更改_bgTaskIdList = [NSMutableArray array]; to _bgTaskIdList = [[NSMutableArray alloc]init]; in BackgroundTaskManager.m
直到我这样做,我的行为不可靠。有时它工作,有时我得到一个堆栈转储。我发现这是因为bgTaskList已被其他数据覆盖,导致错误的访问错误。