在后台下载多个文件(仅限 iOS 7)

Posted

技术标签:

【中文标题】在后台下载多个文件(仅限 iOS 7)【英文标题】:Download several files in background (iOS 7 only) 【发布时间】:2013-10-22 09:24:05 【问题描述】:

我目前正在开发一个只能在 ios 7 上运行的播客应用程序,它具有允许在后台模式下同步和下载最近剧集的功能。

所以同步很清楚,我实现了 application:performFetchWithCompletionHandler 方法并在其中调用同步方法,当同步完成时,我使用UIBackgroundFetchResultNewData 调用completionHandler,或者如果失败,我调用UIBackgroundFetchResultFailed。但是当我运行下载管理器开始下载所有新剧集时,它可能需要很长时间,这取决于网络质量和文件大小,并且后台模式会在某个时候冻结并暂停最近的下载。

如何正确设计后台下载?

或者也许是一些教程链接,它正确描述了后台下载文件。

【问题讨论】:

我正在处理类似的问题。我想知道 AFNetworking 2.0 是否对此提供支持。 您观看了 WWDC 2013 会议吗?后台下载的整个想法是它们由系统有效管理。它不像一个以 100% 的 CPU 运行的 UNIX 后台下载应用程序,没有其他事情发生。苹果对这款设备很吝啬,所以它会节流。正如他们所说,如果您一次下载 4 或 10 个文件,您可能会获得更好的服务,而不是将一个文件请求运出另一个文件请求。请注意,如果设备未插入,系统将非常吝啬资源。 @DavidH ,感谢您提供的信息,不胜感激。但是您对如何以正确的方式实现后台下载有什么想法或想法吗? 我最近将 NSURLConnection 代码转换为使用 NSURLSession。我花了 2 到 3 天的时间——比我预期的要长。它只在前台工作——我计划支持后台传输,但我从 WWDC 视频中知道有很多细节(这里的其他帖子也这么说)。花时间阅读和观看 Apple 在这方面的产品是无可替代的。 【参考方案1】:

我在下载大量文件时观察到相同的行为。

看起来,当您在应用暂停时将所有下载任务添加到后台会话时,它的性能似乎比每次完成并调用您的代理时添加一个新的下载任务要好。

另一种选择是使用 NewsstandKit。后台下载运行非常流畅,但您有一些限制,例如 24 小时阈值,您的应用程序将隐藏在报亭中。

【讨论】:

以上是关于在后台下载多个文件(仅限 iOS 7)的主要内容,如果未能解决你的问题,请参考以下文章

iOS 中的后台获取和后台传输以在后台下载数据 (JSON)

NSURLSESSION 后台下载多个

.NET MVC中使用WebClient在后台下载文件,前台显示进度。

AFNetworking 2.0 是不是支持后台任务? - IOS 7

完成后在后台下载并唤醒应用程序

iOS在一分钟内杀死CallKit VoIP应用程序在后台工作