我必须开发一种 GPS 导航应用程序,该应用程序需要不断跟踪正在开车的用户的位置。具体来说,我不必在地图上显示当前位置,只需以尽可能高的精度记录其位置,以便计算总行驶距离。
当然,如果用户切换到另一个应用程序、来电或类似情况,应用程序需要在后台继续工作……</p>
从我所做的测试以及从这篇有用的帖子(以及文档)中学到的东西,在我看来,在这种情况下最好的选择是标准位置服务,应用程序配置了UIBackgroundModes = location in .plist 文件。这样,即使在后台,它也将继续接收位置更新,并且永远不会被操作系统挂起(这实际上只有在调用 [locationManager startUpdatingLocation] 时才是真的)。这也被这家伙证实了. 我已经亲自验证了这是真的,只需通过使用 Instruments 和内存监视器模块运行应用程序,您可以在其中看到有关应用程序状态的各种标志,首先将应用程序置于后台,并将 UIBackgroundModes 设置为 location 并且 startUpdatingLocation 处于活动状态,然后没有它.
- 1)我现在想知道当应用程序在跟踪位置时终止时该怎么办。我不想丢失任何位置更新,所以只要有新的更新可用,我就需要再次唤醒它。文件说:
重要提示:如果您的应用当前处于挂起状态,则不会调用 applicationWillTerminate: 方法。
但是因为在我的情况下它永远不会被暂停(它将保持在后台但不会暂停),我的逻辑结论是 applicationWillTerminate 将始终被调用,因此我可以在此方法中注册重要的位置更新或区域监控以按顺序被唤醒,然后重新启动标准位置服务。 applicationWillTerminate 是放置此代码的正确位置吗?
2) 一个在后台工作但未挂起的应用程序可能会因为内存不足或我的应用程序没有正确响应内存警告而被操作系统终止?(用户也可以手动关闭它)。我担心 applicationWillTerminate 是否不会以某种方式被调用。
3) Apple 会不会批准一个在后台持续使用标准定位服务的应用程序,因为它的电池消耗很快?您是否曾经遇到过类似应用程序的审批问题?