我需要暂停下载任务,并继续它,即使在应用程序重新启动。但是我不确定我应该使用哪种方法,suspend还是cancelByProducingResumeData。
使用cancelByProducingResumeData,我可以获得部分下载的数据,并使用它重新创建下载任务。但是,我必须手动管理数据,将其保存到文件中,将其读回,并重新创建该任务,并确保新任务不会失败。
使用suspend,我可以暂停并继续下载任务。但是,在重新启动应用程序之后,我能继续执行这个任务吗?我使用后台会话,以便在重新启动过程中保留任务。
cancelByProducingResumeData有要求让它工作,这些要求也适用于suspend/resume吗?或者suspend/resume仅仅意味着“临时挂起一项任务”,就像文件上说的那样?
发布于 2016-05-18 22:02:22
你想得太多了。下载任务的“恢复数据”是,而不是,它是任务接收到的数据。这是一小块簿记数据--你通常会把它放入NSUserDefaults中的数组中。
尽管如此,要回答原来的问题,任务只在会话的上下文中有效。因此,对于前台会话,一旦应用程序退出,会话就不再存在,因此不再可能访问该会话中的任务。因此,在重新启动应用程序之后,不可能恢复挂起的任务,因为该任务不再存在(因为它的会话不再存在)。
对于后台会话,您几乎需要请基金会网络团队中的某个人来获得这个问题的答案,因为这取决于您在事后可以在多大程度上重新创建会话。然而,我的猜测是,它可能在那里也不起作用,如果是这样的话,您应该认为它不受支持。
发布于 2016-05-18 23:28:55
在对苹果开发人员表单进行了研究之后,我发现了这。
任务挂起很少被使用,如果是的话,它主要用于暂时禁用回调,作为某种类型的并发控制系统的一部分。这是因为挂起的任务仍然可以在连线上活动;挂起所做的一切就是阻止它在内部取得进展,发出回调等等。 OTOH,如果您正在实现长期暂停(例如,用户希望暂停下载),则最好调用-cancelByProducingResumeData:。
因此,suspend可能不会停止下载,我应该使用cancelByProducingResumeData:进行长期暂停。
https://stackoverflow.com/questions/37201332
复制相似问题