Iphone 应用程序处于后台状态时的CLLocationManager

Iphone 应用程序处于后台状态时的CLLocationManager,iphone,objective-c,ios,ipad,Iphone,Objective C,Ios,Ipad,我的问题是:当我的应用程序处于非活动状态时,CLLocationManager是否继续运行?是的,它可能会继续运行。当应用程序挂起时,您有两个处理位置服务事件的选项,可在文章中阅读:。 如前所述: 您可以使用两种不同的服务获取用户的当前位置: 标准位置服务是一种可配置的通用解决方案,在所有版本的iOS中都受支持 重大变化定位服务为配备蜂窝无线电的设备提供低功耗定位服务。此服务仅在iOS 4.0及更高版本中可用,还可以唤醒挂起或未运行的应用程序 此外,正如本文底部“在后台获取位置事件”一节所述

我的问题是:当我的应用程序处于非活动状态时,CLLocationManager是否继续运行?

是的,它可能会继续运行。当应用程序挂起时,您有两个处理位置服务事件的选项,可在文章中阅读:。 如前所述:

您可以使用两种不同的服务获取用户的当前位置:

  • 标准位置服务是一种可配置的通用解决方案,在所有版本的iOS中都受支持
  • 重大变化定位服务为配备蜂窝无线电的设备提供低功耗定位服务。此服务仅在iOS 4.0及更高版本中可用,还可以唤醒挂起或未运行的应用程序
此外,正如本文底部“在后台获取位置事件”一节所述:

  • 如果您的应用程序需要提供位置更新,无论应用程序位于前台还是后台,都有多个选项可供选择。首选选项是使用重要位置更改服务在适当的时间唤醒应用程序以处理新事件。但是,如果应用程序需要使用标准位置服务,则可以将应用程序声明为需要后台位置服务
  • 只有当缺少后台定位服务会影响应用程序的运行能力时,应用程序才应请求后台定位服务。此外,任何请求后台位置服务的应用程序都应该使用这些服务为用户提供切实的好处。例如,逐轮导航应用程序可能是后台位置服务的候选应用程序,因为它需要跟踪用户的位置,并报告何时进行下一轮

是的,如果首先调用
CLLocationManager
startUpdatingLocation方法,并在
AppName Info.plist
文件中添加
Required Background Modes->App registers for location updates

要在应用程序处于backround模式时禁用CLLocationManager,只需添加 “应用程序注册位置更新” 在 “所需的背景模式” info.plist文件的密钥


我建议尽可能使用重大更改位置服务,而不是标准位置服务,以保存设备电池。

这有一些重要的微妙之处(从iOS 7.1开始):

  • 如果您只是查找重大更改和区域进入/退出事件,则不应使用位置更新背景模式。即使未设置背景标志,您仍将收到这些事件,同时您将节省大量电池
  • 如果您执行上述操作,您需要注意有限的允许背景时间。如果您不注意在允许的时间内完成网络请求等,则会导致网络事务失败
  • 如果您需要使用详细的位置跟踪(例如-startUpdatingLocation),则只应使用位置背景模式,在这种情况下,此背景模式将使您的应用保持清醒
  • 如果不获取详细位置信息,则使用位置背景模式会激怒用户,并且可能会在审查过程中拒绝您的应用程序(取决于您在整个应用程序中使用位置的方式)
  • 如果未设置后台位置模式,操作系统可能会随时终止您的应用程序,因此您需要确保在ApplicationIDFinishLaunching或applicationWillFinishLaunching中正确重新初始化CLLocationManager实例,以便获得后续的updateLocation或didEnter/ExitRegion委托调用。仅仅因为location通过位置更新唤醒了你的应用程序,它不会在没有你编程的情况下神奇地重新创建你的CLLocationManager

希望有帮助

默认情况下,CLLocationManager是否在应用程序处于非活动状态时运行?是真的吗?不是,应用程序应该注册为后台模式以进行位置更新,应启动CLLocationManager进行位置更新或重要位置更新,当您进入后台时,CLLocationManager将继续更新位置…因此,如何在应用程序处于回退模式时解除CLLocationManager的锁定?#5非常重要-为系统提供一种重新创建任何对象的方法
CLLocationManagerDelegate
否则,即使系统重新启动应用程序,您也不会收到回调