我正在尝试让我的iOS应用程序永远在后台运行,(或位置采样和诊断位置),我找到了这段代码 -
[self.locationManager stopUpdatingLocation];
self.timer = [NSTimer scheduledTimerWithTimeInterval:self.currentTimerTime target:self selector:@selector(checkLocation) userInfo:nil repeats:NO];
[[NSRunLoop currentRunLoop]addTimer:self.timer forMode:NSRunLoopCommonModes];
[[UIApplication sharedApplication]beginBackgroundTaskWithExpirationHandler:nil];
这很有效,但我觉得苹果不喜欢那样,这是最好的做法吗?
答案 0 :(得分:0)
正如您在开发过程中发现的那样,它可能无法在生产中发挥作用。应用获取beginBackgroundTaskWithExpirationHandler
执行时间有限,开发时无限制,但通常在已发布的应用中为60秒,此时将调用到期处理程序(您未在示例代码中指定),以及您的应用预计将使用beginBackgroundTaskWithExpirationHandler
调用返回的ID(您未捕获)来结束后台任务。如果不这样做,将导致您的应用被终止。有关详细信息,请参阅此相关问题/答案。
objective c - Proper use of beginBackgroundTaskWithExpirationHandler