6

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

4

4 回答 4

9

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

于 2012-05-21T20:08:03.180 回答
2

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

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

希望有帮助!

于 2014-03-27T05:13:17.983 回答
2

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

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

  • 标准定位服务是一种可配置的通用解决方案,在所有版本的 iOS 中均受支持。
  • 重大变化定位服务为具有蜂窝无线电的设备提供低功耗定位服务。此服务仅在 iOS 4.0 及更高版本中可用,还可以唤醒挂起或未运行的应用程序。

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

  • 如果您的应用程序需要在前台或后台提供位置更新,则有多种选择。首选选项是使用显着位置更改服务在适当的时间唤醒您的应用程序以处理新事件。但是,如果您的应用程序需要使用标准位置服务,您可以将您的应用程序声明为需要后台位置服务。
  • 只有当缺少这些服务会损害其运行能力时,应用程序才应请求后台定位服务。此外,任何请求后台定位服务的应用程序都应该使用这些服务为用户提供切实的好处。例如,逐向导航应用程序可能是后台定位服务的候选者,因为它需要跟踪用户的位置并报告下一次转弯的时间。
于 2012-05-21T20:06:39.773 回答
1

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

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

于 2013-06-06T19:17:06.467 回答