为什么即使我在后台要求更新位置,我的iOS应用程序也会被杀?

Car*_*lor 0 iphone gps core-location ios

我的iOS应用程序有时会被杀死,即使我在"必需的背景模式"下的plist中放置了"应用程序寄存器进行位置更新".

- (void)applicationDidEnterBackground:(UIApplication *)application
{
 NSDate *dateEnteredIntoBackground = [NSDate date];

 FSLog(@"*** ENTERING BACKGROUND ***");

 [application beginBackgroundTaskWithExpirationHandler:^{ 

    NSDate *dateOfTermination = [NSDate date];              

}];
}
Run Code Online (Sandbox Code Playgroud)

在监视上面的代码的同时,当它被踢出时,NSDate对象总是相隔10分钟.

但是:为了让事情更加令人困惑,我很多时候应用程序很乐意在后台运行超过30分钟而不会终止.作为一项额外的测试,我将iPhone置于法拉第笼中,以确保不会调用位置委托更新(通过回读书面日志文件来确认); 所以似乎可以排除.

任何线索/建议?

谢谢

卡尔.

tig*_*loo 5

您实际上必须请求新位置以防止您的应用被暂停.如果您在一段时间内未申请新位置,iOS将暂停您的应用.

作为解决方法,您可以执行以下操作:

  • 连续请求新位置(最迟在您的到期处理程序中)
  • 使用"重要更改位置服务",只要位置发生变化,您就会将其唤醒

更多详细信息可以在"App States and Multitasking""Make your App Location Aware"中找到,这两者都是Apple官方文档的一部分.