UIApplication* app = [UIApplication sharedApplication];
_backgroundTask = [app beginBackgroundTaskWithExpirationHandler:^{
[app endBackgroundTask:_backgroundTask];
_backgroundTask = UIBackgroundTaskInvalid;
}];
[self startTimer];
NSLog(@"backgroundTimeRemaining: %.0f", [[UIApplication sharedApplication] backgroundTimeRemaining]);
-(void)startTimer
{
self.updateTimer = [NSTimer scheduledTimerWithTimeInterval:60.0
target:self
selector:@selector(repeatedMethod)
userInfo:nil
repeats:YES];
}
当我的应用程序处于前台时,我能够成功运行,但是当我来到后台时,如果
backgroundTimeRemaining:10
它正在运行3分钟,但backgroundTimeRemaining:176
时
它一直在运行。有一点我不明白为什么backgroundTimeRemaining
显示不同的数字。如何在后台继续运行流程。我需要提到的一件事是我的后台进程包含位置更新。我对ios很新。任何帮助都会很明显。
答案 0 :(得分:0)
您需要在应用的info.plist文件中设置以下键值
所需的后台模式:应用程序注册位置更新!
如下图所示,并在AppDelegate中实现位置管理器委托方法,以便它的应用程序位于任何视图控制器中。
在info.plist中设置上述键值将告诉ios为位置服务启用后台模式。
答案 1 :(得分:0)
阅读"在后台获取位置事件(仅限iOS)"在:
基本上,您的应用需要请求获得此背景模式的权限,并使用位置API而不是时间。您将进行一些设置(获取默认位置管理器,设置委托),调用" startUpdatingLocation"从CLLocationManager类开始,然后定期回调新位置。
请注意,如果您这样做,您将非常快地耗尽用户的手机电池,Apple会拒绝您在App Store中的应用,除非您提供免责声明。
答案 2 :(得分:0)
将CLLocationManager
pausesLocationUpdatesAutomatically
设置为NO
。它可能对你有帮助。
有关详细信息,请查看Apple's Location manger documentation。