即使应用程序终止,如何不断收到CoreLocation更新

时间:2012-06-14 20:53:59

标签: iphone ios gps core-location

我们正在尝试使用CoreLocation(企业应用程序来持续跟踪用户的位置,因此用户体验和电池使用不是问题)。

当应用程序在后台时,我们使用带有startUpdatingLocation的CLLocation和Info.plist中用于后台任务的“location”键来获得良好的结果。

然而,在测试中,似乎在几个小时后应用程序终止,我们停止获取更新。

我们已经尝试在applicationWillTerminate中调用startMonitoringSignificantLocationChanges,希望在应用程序终止时仍能正常工作,但这似乎不起作用。

基本上我们想要一种方法来不断地让应用程序接收startUpdatingLocation更新,而不是让它在后台被杀死。

3 个答案:

答案 0 :(得分:0)

简短的回答是,如果需要内存,并且您的应用程序位于后台,则无法阻止iOS终止您的应用。

那就是说,你肯定你的应用真的被杀了吗?当应用程序处于后台时,过去关于位置行为的线索主要集中在应用程序不会死亡的原因(或者至少为什么位置服务更新继续超过开发人员认为他或她已经拥有的点阻止他们)。我个人并没有看到很多个案,个别应用程序在后台被杀,所以我有点惊讶你们的死亡如此可靠。你检查过你的应用程序是否有内存泄漏?我想知道你是否因为记忆而泄漏自己。

答案 1 :(得分:0)

您需要使用此调用注册重要的位置更改:startMonitoringSignificantLocationChanges。如文档中所述:“如果您继续运行此服务并且您的应用程序随后被暂停或终止,则当新的位置数据到达时,该服务会自动唤醒您的应用程序。”
如果足以在后台执行代码,请注册regionChangeMonitoring。再次来自文档:“始终跟踪与您的应用程序关联的区域,包括您的应用程序未运行时。如果在应用程序未运行时跨越区域边界,则将该应用程序重新启动到后台以处理该事件。 “

答案 2 :(得分:0)

我正在开发一个具有相同条件的应用程序。我已经用仪器和内存监视器模块进行了一些测试,实际上没有像你这样的长跑(我已经测试了应用程序只有30分钟),但我注意到它经常进入后台模式而不会被暂停。请注意,仅当UIBackgroundMode设置为“location”或其他允许值之一,并且已调用startUpdatingLocation时,才会暂停它。

操作系统通常会以最近最少使用的顺序自动关闭处于挂起状态的应用程序,但由于这种配置,您的应用程序不应该关闭。 我可以通过操作系统关闭图像的唯一原因是它是否处于非常低的内存状态,并且没有其他可能释放内存,或者当你的应用程序崩溃了。 请参阅my post here。 你的问题现在已经4个月了,你有没有发现问题?