gpt4 book ai didi

iphone - CLLocationManager 地理围栏/startMonitoringForRegion : vs. startMonitoringForSignificantLocationChanges : vs. 10 分钟开始更新调用

转载 作者:IT王子 更新时间:2023-10-29 07:57:48 25 4
gpt4 key购买 nike

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

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

startMonitoringForSignificantChanges

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

Docs :

Apps can expect a notification as soon as the device moves 500 meters or more from its previous notification. It should not expect notifications more frequently than once every five minutes. If the device is able to retrieve data from the network, the location manager is much more likely to deliver notifications in a timely manner.

优点:

  • 电池效率最高

缺点:

  • 取决于 wi-fi/手机信号塔的变化
  • 只能假设每 200 米到 2 公里调用一次(如果在某些地区不会更多)
  • More on accuracy
  • 因此,不一致且不精确

10-minute start-updating或“n 分钟更新”:

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

优点:

  • 一致
  • 可以像您希望的那样准确,也可以像您希望的那样始终如一想要它

缺点:

  • 必须每十分钟或更短时间打一次电话,以保持应用程序在背景(即调用的 n 不能大于 10)

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

startMonitoringForRegion(地理围栏):

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

优点:

  • 简单实现
  • 由系统管理,因此您不必发明自己的临时地理围栏 仅在边界交叉时触发...没有不必要的数据可以扔掉以换取电池命中
  • 因此,对于这类事情应该是最好的,准确的,由系统管理

缺点:

  • People question its effectiveness
  • 关于它是否有利于电池生命周期的巨大冲突非常耗尽电池生命周期。
  • 系统如何监控这个!?
  • 基本上,不确定的行为。

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

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

最佳答案

我已经使用 GPS 从事车辆跟踪工作 2 年了。通过艰难的方式学到了很多东西……根据我的经验,startMonitoringForRegion 或地理围栏取决于单元格更改事件,didEnter 或 didExit 事件在出现单元格/wifi 更改事件之前不会触发。所以它对电池消耗没有任何影响。然而,它会进行额外的计算,这取决于当前正在监视的区域数量。即使是 Apple 的 Reminder 应用程序也不能为基于位置的提醒提供良好的结果,因为它使用了地理围栏。

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

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

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

关于iphone - CLLocationManager 地理围栏/startMonitoringForRegion : vs. startMonitoringForSignificantLocationChanges : vs. 10 分钟开始更新调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18263047/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com