为啥即使我在后台请求位置更新,我的 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 中获取位置更新