我需要按顺序下载文件。目前,我可以在应用程序处于前台时执行此操作。
以下是我使用的逻辑。
创建所有下载任务。 一次恢复一个,当当前完成时,从URLSession:task:didCompleteWithError: 恢复下一个。 当应用程序处于前台状态时此逻辑起作用,但是一旦应用程序开始在后台运行(由于崩溃),我们将在下载完成之前再次运行该应用程序,所有任务状态都已更改为恢复,并且所有任务都同时下载。
这是预期的行为还是我在后台模式下以串行方式订购该产品所缺少的东西?
编辑: 我逐个创建下载任务进行检查。完成第一个任务后,在setTaskDidCompleteBlock 中创建下一个,依此类推。它仅完成第一个任务,并且在setTaskDidCompleteBlock 内部创建任务时该 session 崩溃(这仅在以后台模式运行时才会发生,因为前台可以正常工作)。
这是我的崩溃日志屏幕截图:
和
任何帮助,将不胜感激。
Best Answer-推荐答案 strong>
如果您绝对需要按顺序运行这些请求,则建议不要先实例化所有这些任务,而是一次实例化一个任务,仅在上一个任务完成时实例化下一个任务。
但是,我们必须认识到,您需要为顺序运行请求付出巨大的性能损失。 (并且使用后台 session 时,这个问题将被放大。)如有可能,请查看是否可以更改请求以同时运行。显然,如果您需要一个输出才能创建对另一个请求的输出,则很麻烦(或者至少在重构服务器代码之前),但这显然不是问题所在(因为您创建了所有请求)面前)。如果出于人为原因而执行此顺序请求过程(例如,代码正在填充数组,并且您希望按顺序进行),则可能需要重新设计实现以消除此人为约束。
关于ios - NSURLSessionDownloadTask在后台自动恢复所有任务,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/31993764/
|