我正在尝试设置一个应用程序,该应用程序将能够在后台检查人们的位置,查看他们是否在给定位置,如果是,则向服务器发送 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 会有一些后台任务......这会改变这两种方法之间权衡的计算吗?)有人知道这两种方法的比较吗?
非常感谢!期待看看我们是否可以深入了解如何比较这些方法。