我试图构建一个iPhone应用程序,要求我随时使用核心位置来跟踪用户的位置。我正在使用startMonitoringSignificantLocationChanges,以便它在后台更新,并且因为每当发生重大更改时更新的准确性都不如重新更新那么重要。如何在iOS应用程序中在线更新后台位置?
当前我向Web服务发出HTTP请求以更新位置。这在我运行应用程序时完美运行 - 我的位置在我正在存储位置数据的MySQL数据库中更新。但是当应用程序进入后台时 - 我可以看到手机右上角的位置服务图标仍然在运行,但是当我回去查看数据库时,它根本没有更新我的位置。我测试了这一点,通过在城市中进行驱动器,以应用程序运行的一种方式,以及在后台使用应用程序的方式。
从苹果公司的文档:
如果你离开这个业务正常运行,您的应用程序随后被暂停或终止,服务时新的位置数据到达时自动唤醒您的应用程序。在起床时,您的应用程序会被置于后台,并给予少量时间来处理位置数据。由于您的应用程序位于后台,因此它应该尽可能减少工作并避免任何可能阻止其在分配的时间到期之前返回的任务(如查询网络)。如果没有,您的申请可能会被终止。
这种“处理位置数据的时间很少”究竟有多长?是不是建议查询网络,还是不可能在那个时候查询网络?即使应用程序处于后台,是否有更好的方式来跟踪几个不同用户的位置?
太棒了,男人。这应该工作。现在调整和测试... – unsunghero
这很好。快速问题 - 它如何确定在后台执行哪个代码块?它只是后台任务启动的整个功能吗? – unsunghero
当开始一个后台任务时,你基本上告诉系统你有一个你想要执行的任务,在这种情况下是一个HTTP请求。系统不知道你在开始和结束任务之间做了什么,这就是为什么它给了你UIBackgroundTaskIdentifier,所以你可以在任务完成时向你报告。我的示例代码可能有点不清楚,因为我将UIBackgroundTaskIdentifier声明为局部变量。它应该是一个实例变量,您可以在请求完成并传递给endBackgroundTask时访问它。 –