我正在尝试设置一个应用程序,它将能够检查人们在后台的位置,查看他们是否位于给定的位置,如果他们在,则发送ping到服务器。我们不想耗尽用户的能量,所以我们试图找到最好的解决方案。
我已经做了大量的阅读,但我没有发现很多关于这些方法的信息。我会仔细分析一下正反两面,因为我现在明白了
startMonitoringForSignificantChanges
描述:基于wi和手机塔的改变,系统唤醒了应用程序。
文档
当设备从之前的通知移动500米或更多时,应用程序就会收到通知。它不应期望通知频率超过每五分钟一次。如果设备能够从网络中检索数据,则位置管理器更有可能及时传递通知。
优点:
缺点:
10分钟开始更新 或“n分钟更新”:
描述:这基本上要求应用程序有更多的时间,当额外的时间即将到期时,它调用self.locationManager startUpdating,获取位置,并将后台线程再延长10分钟。
优点:
缺点:
问题:这对电池有什么影响?唤醒GPS并关闭它会对电池造成更大的伤害吗?我无法想象在后台做一个简短的定位检查会消耗那么多电池.但话又说回来,我不知道什么能为全球定位系统供电,并得到一个有用的信号。
startMonitoringForRegion (地理击剑):
简单地说,当你进入一个预定义的区域时,你的应用程序就会被唤醒。这是它们的古怪之处,它是最近出现的,而且关于它的文档更少。我找不到一个很好的描述,如何“系统监控”的边界跨越。据我所知,这是一些非常聪明的算法,或者他们不断地敲击GPS,这会使它比其他方法更不有效。
优点:
缺点:
我想我的问题可以归结为startMonitoringForRegion是如何做到的:当涉及到电池寿命、一致性和精确性时,与在后台测试用户位置的其他方法进行比较。有人对此进行过彻底的测试吗?或者在他们的应用程序中使用它,至少得到一些反馈?就我的目的而言,很可能是在地理围栏和10分钟的更新方法之间进行权衡。(同时,鉴于苹果曾公开谈论过iOS7,也会有一些背景任务.这会改变这两种方法之间的权衡计算吗?)有人知道这两者的比较吗?
非常感谢!期待着看看我们能否深入了解如何比较这些方法。
发布于 2013-08-26 14:36:38
两年来,我一直在使用GPS跟踪车辆。很难学到很多东西..。在我的经验中,startMonitoringForRegion或Geo栅栏取决于单元格更改事件,didEnter或didExit事件在有单元格/wifi更改事件之前不会触发。所以这对电池消耗没有任何影响。然而,它会进行额外的计算,这取决于目前被监测的区域的数量。即使是苹果的提醒应用程序也不会给基于位置的提醒提供很好的结果,因为它使用了地理围栏。
另一种方法是在每分钟启动GPS后n分钟,这是一个很好的选择,如果做得明智的话,它不应该影响电池的寿命。确切地说,影响电池的是高精度模式下的恒定GPS激活。例如,如果你用kCLLocationAccuracyBest和距离过滤器= 0启用GPS,你就可以从字面上观察电池排水情况,很快你的设备也会变得越来越热。
如果我是你的话,我会用kCLLocationAccuracyBest在每10分钟激活一次GPS,持续5秒(如果精确度不是很重要的话,可以让kCLLocationAccuracyNearestTenMeters少用电池)和距离滤波器=5(米)。在这种情况下,电池消耗将是不明显的。你可以玩类似的设置,这可以解决你的具体情况,并最终找出什么是最好的你。
顺便说一句: iPhone使用AGPS,AGPS还使用网络资源在恶劣的信号条件下定位和使用卫星。所以,当你做startUpdatingLocation时,它也会使用附近的手机塔信息。请参阅GPS
https://stackoverflow.com/questions/18263047
复制相似问题