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

Posted

技术标签:

【中文标题】为啥即使我在后台请求位置更新,我的 iOS 应用程序也会被杀死?【英文标题】:Why does my iOS app get killed even though I ask for location updates in the background?为什么即使我在后台请求位置更新,我的 iOS 应用程序也会被杀死? 【发布时间】:2013-04-22 14:45:03 【问题描述】:

即使我在 plist 中的“必需的后台模式”下放置了“用于位置更新的应用程序注册”,我的 ios 应用程序有时也会被杀死。

- (void)applicationDidEnterBackground:(UIApplication *)application

 NSDate *dateEnteredIntoBackground = [NSDate date];

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

 [application beginBackgroundTaskWithExpirationHandler:^ 

    NSDate *dateOfTermination = [NSDate date];              

];

在监控上述代码时,当它被踢出时,NSDate 对象总是相隔 10 分钟。

但是:更令人困惑的是,我经常遇到应用程序乐于在后台运行超过 30 分钟而没有终止的情况。作为一项附加测试,我将 iPhone 放入法拉第笼中,以确保不会调用位置委托更新(这通过读回写入的日志文件来确认);所以似乎可以排除。

任何线索/建议?

谢谢

卡尔。

【问题讨论】:

【参考方案1】:

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

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

不断请求新的位置(最迟在您的到期 处理程序) 使用“重大变化定位服务”,它会唤醒你 每当位置发生变化时

更多详细信息可以在"App States and Multitasking" 和"Making your App Location Aware" 中找到,它们都是 Apple 官方文档的一部分。

【讨论】:

以上是关于为啥即使我在后台请求位置更新,我的 iOS 应用程序也会被杀死?的主要内容,如果未能解决你的问题,请参考以下文章

iOS 位置更新,即使应用程序没有运行(比如找到我的 iphone)

即使应用程序在后台运行,如何使用 swift 在 ios 中获取位置更新

即使在应用程序被杀死后如何继续进行 iOS 位置跟踪?

iOS为啥系统在后台使用位置杀死应用程序

即使应用程序处于终止状态或被杀死,如何在 iOS 中获取位置更新? [复制]

为啥在 iOS 9.3 中杀死/终止应用程序后后台位置不起作用