应用在后台时下载网络数据

Posted

技术标签:

【中文标题】应用在后台时下载网络数据【英文标题】:Downloading network data while app is in background 【发布时间】:2012-11-30 00:13:26 【问题描述】:

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

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

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

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

提前致谢 -

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

【参考方案2】:

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

【讨论】:

明确一点,如果我正在接收位置数据,我的应用程序应该在后台而不是暂停。现在我想从 NSURL 位置下载数据并处理该数据。我知道如果我的应用在执行任务时移动到后台,但如果它已经在后台启动该任务,我可以做到这一点。【参考方案3】:

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

- (void)applicationDidEnterBackground:(UIApplication *)application 

    UIApplication  *app = [UIApplication sharedApplication];
    UIBackgroundTaskIdentifier bgTask;

    bgTask = [app beginBackgroundTaskWithExpirationHandler:^ 
    [app endBackgroundTask:bgTask]; 
    ];

【讨论】:

以上是关于应用在后台时下载网络数据的主要内容,如果未能解决你的问题,请参考以下文章

在后台检查网络连接并上传数据

使用 AsyncTask 显示进度时下载文件时出错

在 iPhone 后台下载

下载网页并在连接可用时刷新

如何利用大数据来处理网络安全攻击

如何在后台重新加载来自网络的新数据