下面是 CLLocationManager文档中描述 开始监控重要位置的变化应用程序行为的部分:
如果您启动此服务,并且您的 申请书 终止,系统自动 将应用程序重新启动到 如果有新的事件发生,则作为后台处理 在这种情况下,选项词典 传给了 Application: did FinishLaunchingWithOptions: 应用程序委托的方法 里面有钥匙 UIApplicationLaunchOptionsLocationKey 表明你的申请是 由于位置事件而启动。 重新发射后,你必须 配置位置管理器对象 并调用此方法继续 接收位置事件。当你 重新启动位置服务,当前 事件被传递给您的代表 除此之外, 你的位置经理的财产 对象中填充了最多的 最近的位置对象甚至在你之前 开始定位服务。
所以我的理解是,如果您的应用程序终止(并且我假设如果您不从 终止调用 停止监视重要位置的变化) ,您将被一个 UIApplicationLaunchOptionsLocationKey参数唤醒到 Application: did FinishLaunchingWithOptions。此时,您创建 CLLocationManager,调用 开始监控重要位置的变化,并为 时间有限进行后台位置处理。所以我对这一点没意见。
前面的段落只谈到了应用程序终止时会发生什么,并没有提到应用程序挂起时你会做什么。完成启动选项的文件显示:
应用程序跟踪位置 被清除了, 现在已经重新启动。在这个 在大小写的情况下,字典包含一个键 表示该申请是 因为一个新地点而重新启动 事件。
建议您只有在您的应用程序启动时(因为位置更改)才会收到此呼叫,此时您已被终止。
然而,位置感知编程指南中关于 重大改变服务的段落有以下内容:
如果您让此服务继续运行,并且 你的申请 暂停或终止服务 自动唤醒您的 应用程序时,新的位置数据 到达。在起床时间,你的 应用程序放在后台 并给予少量的时间 处理位置数据。因为 你的申请就在后台, 它应该做最少的工作,并避免 任何任务(例如查询 网络) 在分配的时间之前返回 过期。如果没有,你的 申请可能被终止。
这表明,如果你的应用程序被暂停,你会被位置数据唤醒,但是没有提到你是如何被唤醒的:
在写这篇文章的过程中,我想我可能已经回答了我自己的问题,但是如果有一个更有知识的人来证实我对这个问题的理解,那就太好了。