CLLocationManager,而应用程序处于后台状态

我的问题是:是否CLLocationManager继续运行,而我的应用程序是不活动的?

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

是的,可以。 在您的应用程序被暂停时,您有两种处理位置服务事件的选项,您可以在文章“ 获取用户的当前位置”中阅读这些选项 。 如上所述:

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

  • 标准的位置服务是一个可configuration的,通用的解决scheme,并支持所有版本的iOS。
  • 显着变化的定位服务为具有蜂窝无线电的设备提供低功率定位服务。 此服务仅在iOS 4.0及更高版本中可用,还可以唤醒已暂停或未运行的应用程序。

另外,如本文底部的“在后台获取位置事件”部分所述:

  • 如果您的应用程序需要位置更新(无论应用程序处于前台还是后台),则有多种select。 首选方法是使用重要位置更改服务在适当时间唤醒您的应用程序以处理新事件。 但是,如果您的应用程序需要使用标准位置服务,则可以将您的应用程序声明为需要后台位置服务。
  • 只有在缺乏这些服务会削弱其运营能力的情况下,应用程序才应要求后台定位服务。 另外,任何请求后台定位服务的应用程序都应该使用这些服务为用户提供切实的好处。 例如,一个转弯的导航应用程序可能是后台定位服务的候选对象,因为它需要跟踪用户的位置,并在下一个转弯时进行报告。

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

  • 如果您只是在寻找重大更改和区域进入/退出事件,则不应使用位置更新背景模式。 即使未设置背景标志,您仍然会收到这些事件,并且您将同时节省大量电量。
  • 如果你这样做,你需要注意有限的背景时间。 如果您不小心在允许的时间内包装networking请求等,您将networking交易失败。
  • 如果您需要使用详细的位置跟踪(例如-startUpdatingLocation),则只应使用位置背景模式,在这种情况下,此背景模式将使您的应用保持清醒状态。
  • 在没有获取详细位置的情况下使用位置背景模式会激怒您的用户,并可能在审核过程中取消您的应用(取决于您在整个应用中如何使用位置)。
  • 如果您没有设置后台位置模式,您的应用程序可能随时被操作系统终止,因此您需要确保在applicationDidFinishLaunching或applicationWillFinishLaunching中正确重新初始化您的CLLocationManager实例,以获取后续的updateLocation或didEnter / ExitRegion委托调用。 只是因为位置唤醒你的应用程序的位置更新,它不会奇迹般地重新创build您的CLLocationManager没有你编程!

希望有所帮助!

要在应用程序处于后台模式时禁用CLLocationManager,只需在info.plist文件的“必需的后台模式”键中添加“位置更新的应用程序注册”即可。

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