【发布时间】:2013-10-11 15:28:27
【问题描述】:
在阅读了有关使用新 iOS7 api (NSURLSession) 进行后台下载的 Apple 文档后,我有点失望。我确信 Apple 正在后台管理网络可用性的暂停/恢复(或提供这样做的选项),但没有……
所以阅读文档,这就是我们所拥有的:
当任何任务完成时,NSURLSession 对象调用 委托的 URLSession:task:didCompleteWithError: 方法 错误对象,如果任务成功完成,则返回 nil。 如果任务是可恢复的下载任务,则 NSError 对象的 userInfo 字典 包含 NSURLSessionDownloadTaskResumeData 键的值。您的 应用程序应使用可达性 API 来确定何时重试,以及 然后应该调用 downloadTaskWithResumeData: 或 downloadTaskWithResumeData:completionHandler: 创建一个新的下载 任务以继续下载。转到第 3 步(创建和恢复 任务对象)。
到目前为止我了解解决方案,但我的问题是:什么架构最适合处理网络丢失并在后台恢复下载?
就我而言,我使用的是可达性,每次网络可用时,我都会恢复所有任务(在创建时通过 NSArray 引用),并在网络丢失时暂停它们。这在前台效果很好,但对于后台我需要以下几点帮助:
如果我的应用在前台没有连接,如果我在没有连接的情况下进入后台,我的所有任务都将保持暂停状态,并且在网络可用时不会返回......
-
在后台丢失网络,停止我所有的下载/任务。 场景:
- 在前台,我开始下载我的任务
- 我进入后台,10 秒后切换到“aireplan 模式”
- 我的所有任务都出错了。所以在方法 URLSession:task:didCompleteWithError: 我恢复他们使用 downloadTaskWithResumeData 或者如果我不能(因为有些没有 足够的恢复数据)我正在创建一个没有恢复它的新任务(除非当时网络恢复了)。
- 然后我把wifi挂了
- 由于我仍在后台运行,因此当网络恢复时,如果不启动应用程序,我无法触发“恢复”...
我该如何解决这些问题?我错过了什么吗?
【问题讨论】:
-
我和你一样失望。您提到您正在等待 Apple 对此的答复。你有听过他们的消息吗?分辨率是多少?
-
与 Apple 进行了很多交流但效果不佳,建议使用应处理这些情况的酌情标志(但不保证及时结果)。这种模式不是我的目标,我并没有过多关注,但我的测试没有成功。如果您已经对此部分进行了测试,那么获取信息仍然很有趣。
标签: ios ios7 nsurlsession