2012-11-30 174 views
1

我正在使用coreLocation和在后台注册位置更新的应用程序。在应用程序处于后台时,我可以通过网络调用Web服务来下载和存储数据吗?我在确定我在后台能做多少事情时遇到问题。在应用程序处于后台时下载网络数据

作为一个例子,当用户对他/她的位置做出重大改变时,我可以拨打一个天气服务请求并记录该位置的天气(这不完全是我将要做的,而是作为一个Web服务的例子)?导致他/她当时的地点列表以及当时的天气情况。

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

我明白电池和网络费用的缺陷,如果一个应用程序不断这样做。目前这一点并不重要。只需在应用程序处于后台时查找下载数据的具体内容即可。

在此先感谢 -

回答

2

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

如果您启动刷新数据的调用,并将其封装在beginBackgroundTaskIdentifier和endBackgroundTaskIdentifier调用中,您应该有机会处理网络数据方法。我不认为你可以启动该进程或指望它在后台的任何其他时间处理并可能被暂停。

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

0

当系统挂起您的应用程序时,系统可以并将拆除网络连接。我猜你现有的连接会在'非活动'(转换)状态期间,或者仍处于“后台”但处于“挂起”状态之前,花费一些时间来完成他们的工作。另外,在转换到“暂停”之前,您可以在“背景”中请求更多时间。阅读“后台执行和多任务”here。 Newsstand下载和VOIP应用程序是唯一可以维持网络连接的服务。

+0

刚要清楚,如果我正在接收位置数据,我的应用程序应该处于后台并且不会被暂停。现在我想从NSURL位置下载数据并处理这些数据。我知道如果我的应用在执行任务时移动到背景,我可以做到这一点,但是如果在任务已经在后台时开始该任务,那么该怎么办。 –

0

在我的应用程序会下载大量的PDF文件,我只是用这个代码来继续下载PDF文档长达10分钟的时候,用户点击他们的主页按钮,并把应用程序进入后台状态:

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

    bgTask = [app beginBackgroundTaskWithExpirationHandler:^{ 
    [app endBackgroundTask:bgTask]; 
    }]; 
} 
相关问题