我已经尝试了一个类似的过程,并通过显着的位置变化和区域监控达到了我的最佳用途。经过多次迭代,我目前对电池寿命和相当可靠的处理几乎没有影响。
我使用显着的位置更改来触发过滤通知的方法,仅为当前位置有限半径内的那些设置区域。
根据我的经验,预计相距约 3-4 英里的位置会发生重大变化。这可能会有很大差异,但我不记得看到更多。这使得城镇周围的处理非常少见,当用户上高速公路时相当可预测。我尝试了多种区域大小、刷新半径和位置服务敏感度设置。
请记住,您可以注册的地区数量是有限的。我没有找到确切的限制,但一些用户表示任何单个应用程序都不应该期望注册超过 10 个区域。我自己没有找到任何可以证实该数字的参考资料,而且我有时会注册超过 10 个。
当看到设备以高速行驶很长时间时,我已经尝试增加刷新的半径和最小距离。在这种情况下,我觉得我可能会因为不必要的处理周期而浪费电池。在实际使用中,这似乎不是问题,但无论如何我都在努力最大限度地提高效率。
我的经验与您的具体问题有关;
1-对于您的情况,这取决于您打算考虑触发通知的位置有多近。如果您在用户到达几英里内或用户到达城镇时通知您,这实际上可能是可行的。如果您想在用户到达某个位置几米范围内时触发,那么这不适合您。根据我的经验,聆听重大的位置变化通常不会对电池寿命造成很大影响。当然,您在收到事件后进行了多少处理和网络活动是另一个因素。我检查设备移动了多远,自上次位置被接受以来的时间。就我而言,没有必要每次都刷新所有内容,我会相应地限制我的反应。
2- 我对重大位置变化的经验如上所述,但所有文件都清楚地表明,设定距离与所使用的各种信号的条件和可用性无关。我想在城市环境中它更容易预测,而在开阔的空间中则更少。我的大部分经验都属于前者。
3- 从大量的谷歌搜索、大量的文档和大量有根据的推测中,我得出结论,显着的位置变化是由单元可用的所有信号的神奇组合决定的。有 wifi 信号可以以不同程度的准确度广播它们的位置,并且手机信号塔通常知道它们在哪里。定位服务正在使用所有这些以及各自的信号强度来决定设备何时行进了“重要距离”。我认为很明显,计算会随着条件的变化而变化,并且随着它们继续改善准确性和功耗之间的平衡而发生变化,因此规格模糊。
4- 如问题 1 所示,有一些因素需要考虑,这些因素可能会决定您可以单独使用重大的位置更改,但我相信区域监控在任何情况下都最适合您的目的。可能两者的结合是有序的。我对自己的应用程序非常满意。
5- 重大的位置变化会唤醒您的应用。在您的方法中,您必须遵循一些旨在在后台运行的准则,并了解这些限制。在 beginBackgroundTaskWithExpirationHandler 和 UIBackgroundTaskInvalid 调用中包装你的后台方法。注意线程阻塞。完整阅读文档和位置处理指南。
6-我的建议如上。其他注意事项一般是在您使用定位服务时。您需要制作各种自定义处理程序。即使您使用该服务,您也不想对收到的每条消息做出反应。您必须根据需要检查变化、准确性、新近度和所有爵士乐响应。我发现这一系列文章对于了解基础知识非常宝贵:来自 Long Weekend 网站的第 1 部分,共 3 部分
7- 如上所述,我的理解是系统范围内可以注册的区域数量有限制。我认为,由于他们没有确切地告诉您该数字是多少,它可能或多或少地允许您的应用程序取决于其他应用程序设置了多少其他应用程序。根据我的经验,我经常在我设定的范围内注册和删除 10 到 15 个区域。我将它们按从最近到最远的顺序设置,因为我假设最后一个将首先被删除或拒绝。其他注意事项-区域标识符是全局的,因此如果您的标识符不是唯一的,它将用相同的名称替换先前的区域。- 区域大小和边距是您需要试验的设置,以针对您的特定需求进行最佳调整。