1

我将 coreLocation 与一个在后台注册位置更新的应用程序一起使用。我可以在应用程序处于后台时对 Web 服务进行网络调用以下载和存储数据吗?我在确定我可以在后台做多少事情时遇到问题。

例如,当用户对他/她的位置进行重大更改时,我是否可以调用天气服务来请求并记录该位置的天气(这不完全是我要做的,但作为一个示例网络服务)?生成他/她去过的地方以及当时的天气列表。

我可以在后台进行网络连接和请求以下载数据吗?还是我以某种方式受到限制?或者我只是受到我的过程所花费的时间的限制。

如果应用程序不断这样做,我确实了解电池和网络费用的缺陷。就目前而言,这是无关紧要的。只是在应用程序处于后台时寻找有关下载数据的细节。

提前致谢 -

4

3 回答 3

2

您的应用程序不一定因为您在后台注册了定位服务而在后台运行。当您的位置管理器发送位置事件时,它基本上被唤醒以处理您的委托呼叫。如果您的位置在一段时间内没有改变,应用程序将被暂停,甚至可能被终止。位置管理器将唤醒它,当处理新的位置事件时,您将有有限的时间来工作。

如果你发起一个刷新数据的调用,包装在 beginBackgroundTaskIdentifier 和 endBackgroundTaskIdentifier 调用中,你应该有一个很好的机会来处理网络数据方法。我认为您不能启动该进程,也不能指望它在任何其他时间在后台处理并可能暂停。

psoft 引用的链接将使您更好地了解如何在后台管理进程。

于 2012-11-30T03:19:26.263 回答
0

当系统挂起您的应用程序时,它可以并且将会断开网络连接。我猜您现有的连接将有一些时间来完成他们的工作,无论是在“非活动”(过渡)状态期间,还是仍处于“后台”但在“暂停”状态之前。此外,您可以在过渡到“暂停”之前在“后台”请求更多时间。在此处阅读“后台执行和多任务处理” 。唯一可以维持网络连接的服务类型是报亭下载和 VOIP 应用程序。

于 2012-11-30T00:35:10.770 回答
0

在我下载大型 PDF 的应用程序中,当用户点击主页按钮并将应用程序置于后台状态时,我只需使用此代码继续下载 PDF 长达 10 分钟:

- (void)applicationDidEnterBackground:(UIApplication *)application 
{
    UIApplication  *app = [UIApplication sharedApplication];
    UIBackgroundTaskIdentifier bgTask;

    bgTask = [app beginBackgroundTaskWithExpirationHandler:^{ 
    [app endBackgroundTask:bgTask]; 
    }];
}
于 2012-11-30T04:18:50.383 回答