位置服务应用程序 - Xcode "Stop" 永远离开位置服务 运行

Location Services App - Xcode "Stop" leaves location services running forever

这是一个奇怪的问题。我正在编写一组使用位置服务的应用程序 - 一些在后台,一些仅在前台 - 并且在大多数情况下,当不需要后台位置时,我每当应用程序进入后台时,请小心停止我的 CLLocationManager 更新。

我注意到,通过使用停止按钮停止我在 Xcode 7.3 中的调试构建,这些应用程序会永久卡住使用定位服务 - 为了确保 GPS 没有被使用,我需要重新启动应用程序,然后按照用户的方式关闭它们。

要点如下:

还有超级奇怪的部分:

唯一的办法是在我完成工作后重新启动应用程序,然后将它们设置为后台,否则我的 phone 每小时会耗电 10%。我在设备 运行 iOS8 和 iOS9.

中看到过这种现象

还有其他人注意到这种行为吗?或者更重要的是,是否有任何 Xcode 配置可能性来避免这种情况?

我不太清楚为什么这种行为不应该开始。要停止重要位置更新,您必须调用 stopMonitoringSignificantLocationChanges 方法。当您点击 Xcode 中的停止按钮时,您只是强行终止了正在执行的内务管理代码 none 的应用程序。这意味着没有人会告诉位置管理器停止执行您的应用程序要求它执行的操作,并且当 iPhone 获得新位置时,它会将您的应用程序启动到后台模式并将该位置读数传送给它。

我怀疑您能做些什么来改变这种行为,因为它本质上意味着教 Xcode 如何进行清理,这是特定于您的应用程序的。

回复:“状态栏中的小位置图标

首先,即使箭头是实心的,也不一定意味着该应用会继续使用 GPS 并大量耗尽 phone 电池。这个箭头图标是关于隐私的,它是用来告诉用户至少有一个应用程序可以使用区域监控以外的方法或其他方法了解位置更改

请记住,如果以下服务之一处于活动状态,则箭头为实心:

  • 使用 GPS 进行标准位置更新
  • 没有 GPS 的标准位置更新
  • 重要位置更新
  • 访问跟踪

我之所以问您使用的是哪个位置服务,是因为最后两项服务会在 iPhone 重启后恢复,并且如果您终止应用程序也不会中断。标准位置更新不会在 phone 重新启动时恢复,并且会在应用程序终止时取消。