2016-04-22 121 views
1

这是一个奇怪的问题..我正在编写一组使用位置服务的应用程序 - 一些位于后台,一些位于前台,另一些位于前台部分,当不需要后台位置时,我会小心地在应用程序进入后台时停止我的CLLocationManager更新。位置服务应用程序 - Xcode“停止”让位置服务永远运行

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

这里的要点是:

  • 缩小与home键关闭位置的服务,无论是在Xcode或跳板开始了应用。 (我看到位置符号在~10秒后从状态栏中消失)
  • 强制关闭应用程序,通过双击主屏幕并将其从屏幕上滑开,关闭位置服务,无论是从Xcode还是从跳板
  • 使用Xcode的停止按钮关闭应用程序让位置服务永远运行。

并且,超级怪异的一部分:

  • 来说说这个停滞状态后,重新启动iPhone 离开位置服务运行下去!

唯一的办法是在完成工作后重新启动应用程序,然后进行背景处理,或者我的手机每小时失去10%的电量。我在运行iOS8和iOS9的设备中看到了这种现象。

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

+0

这是什么意思关闭或位置服务?您指的是哪种特定服务 - 区域监控,标准位置更新,重要位置更新? –

+0

如果您问我在代码中停止了什么,我会调用stopUpdatingHeading,stopUpdatingLocation和stopMonitoringSignificantLocationChanges。 但是,如果你问我“关闭位置服务”的含义,我的意思是iPhone似乎停止访问GPS等 - 它从状态栏的右上角移除小位置图标,停止显示紫色我的应用程序旁边的位置图标设置/隐私/位置服务,并停止吞噬电池电量在100英里每小时:) – Mete

回答

0

我不太确定为什么这种行为不会开始。要停止重要的位置更新,您必须致电stopMonitoringSignificantLocationChanges方法。当你点击Xcode中的停止按钮时,你只需强行杀死该应用程序而不执行任何管家代码。这意味着没有人告诉位置管理者停止执行您的应用请求它执行的操作,并且当iPhone获得新位置时,它会将您的应用启动到后台模式,并将该位置读取传送给它。

我怀疑你可以做任何事情来改变这种行为,因为它基本上意味着教Xcode如何做一个清理,这是特定于你的应用程序。

回复:

首先“从状态栏一点位置图标”,即使箭头是实心的,它并不一定意味着该应用程序可以使用GPS和积极水渠手机电池。此箭头图标是关于隐私的,它用于告诉用户至少有一个应用程序可以使用区域监视之外的方法或方法来了解位置更改

请记住,箭头是固体,如果以下服务之一有效:

  • 与GPS标准位置更新,而无需GPS
  • 标准位置更新
  • 显著位置更新
  • 访问跟踪

我问你使用哪种位置服务的原因是临时t最后两个服务将在iPhone重新启动时恢复,并且如果您终止应用程序,则不会中断。标准位置更新不会在手机重新启动时恢复,并会在应用程序终止时取消。

+0

好的谢谢,这回答我的问题。现在,至于为什么它不会开始 - 当我强制关闭手机上的应用程序时,您提到的“清理”会发生 - 也就是说,我的AppDelegate的appWillTerminate类型方法会被调用。所以我认为这是相当合理的想象当你强制退出调试器的应用程序时,iOS系统也可能会调用这些方法。我承认它不合逻辑。 – Mete

+0

而你对此的评论不一定*耗尽电池是很好的知道;但是从经验来看,它正在非常积极地耗尽它。当那些重要的位置更新被禁用时,生活会更好:) – Mete

+0

Mete,我不知道你的代码做了什么(以及如何),但是当你看到电池消耗得相当积极时,现在是时候仔细看看你的代码。 CPU和无线电(网络)击中电池最困难。位置更新只是触发所有代码。监测重大位置变化实质上是免费服务。 –