这是来自CL位置管理器描述应用程序行为的文档开始监控重大位置变化:
如果您启动此服务并且您的
随后申请
系统自动终止
重新启动应用程序到
如果有新事件到来,则背景。在
在这种情况下,选项字典
传递给
应用程序:didFinishLaunchingWithOptions:
您的应用程序委托的方法
包含密钥
UIApplicationLaunchOptionsLocationKey
表明您的申请是
由于位置事件而启动。
重新启动后,您仍然必须
配置位置管理器对象
并调用此方法继续
接收位置事件。当你
重启定位服务,当前
事件已发送给您的代表
立即地。此外,位置
您的位置经理的财产
对象填充最多
最近的位置对象甚至在您之前
启动定位服务。
所以我的理解是,如果你的应用程序终止(我假设如果你不调用停止监控重大位置变化 from 应用程序将终止)你会被吵醒UIApplicationLaunchOptionsLocationKey参数为应用程序:didFinishLaunchingWithOptions。那时你就创建了你的CL位置管理器, call 开始监控重大位置变化并进行后台位置处理有限的时间。所以我对此很满意。
上一段仅讨论了应用程序终止时会发生什么,并没有建议您在应用程序暂停时做什么。的文档didFinishLaunchingWithOptions says:
该应用程序跟踪位置
后台更新,被清除,
现在已经重新启动。在这个
情况下,字典包含一个键
表明该申请是
由于新地点而重新启动
事件。
建议您仅在终止后启动应用程序(由于位置更改)时才会收到此呼叫。
然而,关于重大变更服务 in the 位置感知编程指南有以下说法:
如果您让此服务保持运行并且
您的申请随后将
暂停或终止服务
自动唤醒你的
新位置数据时的应用
到达。起床时,您的
应用程序被置于后台
并给予少量时间
处理位置数据。因为
您的应用程序在后台运行,
它应该做最少的工作并避免
任何任务(例如查询
网络)可能会阻止它
在指定时间之前返回
过期。如果没有,您的
申请可能会被终止。
这表明如果您的应用程序已被暂停,您会被位置数据唤醒,但没有提及您是如何被唤醒的:
- 是否UI应用程序代理收到回调告诉我我正在从挂起状态恢复到后台状态?
- 位置管理器(应用程序暂停时被冻干)是否开始接收locationManager:didUpdateToLocation:fromLocation回调?
- 我只需要在我的中实现代码吗?更新到位置检查应用程序状态并在后台模式下进行最少处理的消息?
在写这篇文章的过程中,我想我可能刚刚回答了我自己的问题,但如果我对此的理解得到更有知识的人的证实,那就太好了。
自从我问这个问题以来,我已经做了相当多的测试(主要是在家里和工作之间的火车上),并确认了暂停应用程序的行为正如我在问题末尾所怀疑的那样。
也就是说,您暂停的应用程序被唤醒,您不会在应用程序委托上收到任何回调,而是通过现有的位置接收位置更新CLLocationManagerDelegate。您可以通过检查来检测您是否正在后台运行应用程序状态,并对从挂起状态唤醒进行定位处理的情况做有限的工作。
[UIApplication sharedApplication].applicationState == UIApplicationStateBackground
我通过一个位置测试工具得出了这个结论,欢迎您使用download并尝试一下。这是一个非常简单的应用程序,允许您通过 UI 打开重大更改和 GPS 更改 API,并记录您收到的所有响应。
N.B.前面的答案中的第六点不正确。冻干暂停的应用程序确实会收到CLLocationManagerDelegate当它们从挂起状态唤醒时回调。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)