24

我正在尝试设置一个应用程序,该应用程序将能够在后台检查人们的位置,查看他们是否在给定位置,如果是,则向服务器发送 ping。我们不想消耗用户的精力,因此我们正在尝试找出最佳解决方案。

我已经进行了大量阅读,但我没有找到关于这些方法的太多信息。我将按照我现在了解的方式介绍利弊

startMonitoringForSignificantChanges

描述:基于 wi-fi 和手机信号塔的变化,系统会唤醒应用程序。

文档

一旦设备从之前的通知移动 500 米或更远,应用程序就会收到通知。它不应期望通知的频率超过每五分钟一次。如果设备能够从网络检索数据,则位置管理器更有可能及时传递通知。

优点:

  • 电池效率最高

缺点:

  • 取决于 wi-fi/蜂窝塔的变化
  • 只能假设这将每 200m 到 2km 调用一次(如果不是在某些区域更多)
  • 更多关于准确性
  • 因此,不一致和不精确

10 分钟启动更新或“n 分钟更新”:

描述:这基本上是要求应用程序获得更多时间,当额外时间即将到期时,它会调用 [self.locationManager startUpdating],获取位置并将后台线程延长 10 分钟。

优点:

  • 持续的
  • 可以随心所欲地准确 随心所欲地一致

缺点:

  • 必须每十分钟或更短时间打一个电话以保持应用程序在后台运行(即调用的 n 不能大于 10)

问题:这对电池有什么影响?唤醒 GPS 并关闭它对电池的伤害更大吗?我无法想象在后台运行一个简短的位置检查会消耗那么多电池……但话又说回来,我不知道启动 GPS 并获得可用信号的原因。

startMonitoringForRegion(地理围栏):

简而言之,当您进入预定义区域时,您的应用会被唤醒。这是他们中的怪人,它是更新的,并且文档较少。我找不到关于“系统监控”边界交叉的很好描述。据我所知,这是一些非常聪明的算法,或者他们不断地对 GPS 进行 ping 操作,这将使其不如其他方法有效。

优点:

  • 简单的实现
  • 由系统管理,因此您不必发明自己的临时地理围栏 仅在越界时触发...无需丢弃不必要的数据以换取电池故障
  • 因此,应该是最适合这种事情的,准确的,由系统管理

缺点:

  • 人们质疑它的有效性
  • 关于它是否有利于电池寿命或是否会严重耗尽电池寿命的巨大冲突。
  • 系统怎么监控这个!?
  • 基本上,不确定的行为。

我想我的问题归结为 startMonitoringForRegion: 与其他在后台测试用户位置的方法相比,在电池寿命、一致性和精度方面如何。有没有人彻底测试过这个?或者在他们的应用程序中使用它并至少获得了一些反馈?就我的目的而言,可能需要在地理围栏和 10 分钟更新方法之间进行权衡。(另外,鉴于 Apple 公开表示 iOS7 会有一些后台任务......这会改变这两种方法之间权衡的计算吗?)有人知道这两种方法的比较吗?

非常感谢!期待看看我们是否可以深入了解如何比较这些方法。

4

1 回答 1

16

我一直在使用 GPS 进行车辆跟踪 2 年。学到了很多东西......根据我的经验,startMonitoringForRegion 或地理围栏取决于单元格更改事件,didEnter 或 didExit 事件在发生单元格/wifi 更改事件之前不会触发。因此,它对电池消耗没有任何影响。但是,它会进行额外的计算,这取决于当前正在监视多少个区域。即使是 Apple 的 Reminder 应用程序也不能为基于位置的提醒提供良好的结果,因为它使用了地理围栏。

另一种方法是在每 m 分钟后启动 n 分钟 GPS 是不错的选择,如果做得好,它不应该影响电池寿命。电池的确切影响是在高精度模式下持续激活 GPS。例如,如果您使用 kCLLocationAccuracyBest 和 distance-filter = 0 启用 GPS,您可以真正观察到电池电量耗尽,很快您的设备也会开始变热。

如果我是你,我会在每 10 分钟后使用 kCLLocationAccuracyBest 激活 GPS 5 秒(或者如果精度不是那么重要,可以使用 kCLLocationAccuracyNearestTenMeters 以使用更少的电池)和距离过滤器 = 5(米)。在这种情况下,电池消耗将不明显。您可以使用类似的设置来解决您的具体情况,并最终找出最适合您的设置。

顺便说一句:iPhone 使用 AGPS,A-GPS 额外使用网络资源在信号较差的情况下定位和使用卫星。因此,当您执行 startUpdatingLocation 时,它还将使用附近的手机信号塔信息。见http://en.wikipedia.org/wiki/Assisted_GPS

于 2013-08-26T14:36:38.503 回答