我认为你应该重新考虑你的这个应用程序的方法。这听起来像是你已经决定构建一组功能,这些功能不一定非常适合应用程序运行的设备的特征。
你写到“应用程序每隔n分钟就会获取一个位置”,但这不是iOS位置服务的工作原理。偶尔为当前位置查询位置服务是一种很好的方法,当您的应用程序在前台运行时,一旦它被暂停或终止,这不是一个选项。相反,您需要以某种准确性级别订阅位置事件,并且在设备位置发生变化时,您的应用将收到通知。对于您收到这些事件的时间表没有任何保证,并且这取决于您请求的准确性和设备移动的速度。
此外,获取位置是一项昂贵的操作,可能会迅速耗尽设备的电池。在一两个小时内通过用户可用的电池电量进行刻录是快速卸载应用程序的好方法。在可能的情况下,您应该使用重要的位置更改服务,以最小的功耗获取低精度的位置更新。如果您需要更高的精确度,那么请考虑使用定义区域的边界交叉事件,或至少尽可能降低您请求的精度。
由于所有这些,你仍然需要在有限的时间内工作,一旦位置更新启动,你的应用必须运行。这可能不够长,无法往返服务器。如果网络连接已经处于活动状态,并且设备的延迟时间较短,您可能会在某些时候收到响应,但我希望能够频繁地看到应用程序终止了应用程序。发生这种情况时,我不知道您会继续收到位置更新,否则可能会重新启动该应用。
除非下载警报列表并在本地显示警报,否则更好的解决方案可能是尝试通过UDP将当前位置发送到服务器,当您发现重大的位置更改时。这样,您可以在不等待响应的情况下发出网络请求。只有其中一些请求仍会成功,但至少您的应用不会被终止。然后,您可以处理在服务器上收到的位置,并在适当时发送推送通知。
我意识到你似乎无法进行服务器端更改。在这种情况下,您可能能够做的最好的事情就是在应用程序运行时为附近区域预先获取警报(并且如果您曾设法在后台完成往返)。通过这种方式,您可以将位置更新与该列表进行比较,而无需在每次位置更新时触发网络请求。不幸的是,这听起来像你可能会被支持到一个角落,在目前的限制下没有可靠的解决方案。
谢谢,约拿和@yeesterbunny。我想现在我可以更好地了解问题,然后回到客户手中。 – JAC 2013-02-28 03:48:27