1

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

当应用程序在后台使用带有 startUpdatingLocation 的 CLLocation 和 Info.plist 中的“位置”键用于后台任务时,我们得到了很好的结果。

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

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

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

4

3 回答 3

0

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

操作系统通常会以最近最少使用的顺序自动关闭处于挂起状态的应用程序,但由于这种配置,您的应用程序不应关闭。我可以映像被操作系统关闭的唯一原因是它是否处于非常低的内存条件并且它没有其他释放内存的可能性,或者如果您的应用程序当然已经崩溃。请在此处查看我的帖子。您的问题已经 4 个月大了,您找到问题了吗?

于 2012-10-03T12:17:54.033 回答
0

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

于 2012-06-17T02:33:03.937 回答
0

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

也就是说,您确定您的应用程序真的被杀死了吗?过去关于应用程序在后台时的位置行为的线程主要集中在为什么应用程序不会死掉(或者至少为什么位置服务更新继续超过开发人员认为他或她已经停止它们的点)。就我个人而言,我还没有看到很多单独的应用程序在后台被杀死的情况,所以我有点惊讶你的死机如此可靠。您是否检查过您的应用程序是否存在内存泄漏?我想知道你是不是把自己从内存中泄露了出来。

于 2012-06-14T21:42:29.423 回答