我需要暂停下载任务并在应用重启后重新启动它。但我不确定应该使用哪种方法,suspend
或cancelByProducingResumeData
。
使用cancelByProducingResumeData
我可以获取部分下载的数据并使用它重新创建下载任务。但是,我必须手动管理数据,将其保存到文件,读回,重新创建任务并确保新任务不会失败。
使用suspend
,我可以暂停和恢复下载任务。但是,重新启动应用后,我可以恢复此任务吗?我正在使用后台会话,因此任务会在重新启动时保留。
cancelByProducingResumeData
有requirements可以使用,这些要求是否也适用于suspend
/ resume
?或者suspend
/ resume
仅仅意味着“临时暂停任务”,正如文件所说的那样?
答案 0 :(得分:3)
你过度思考这个问题。 "恢复数据"对于下载任务,不该任务在此之前已收到的数据。这是一小部分簿记数据 - 您通常会在NSUserDefaults
中投入数组。
话虽如此,为了回答原始问题,任务仅在会话的上下文中有效。因此,对于前台会话,一旦您的应用程序退出,会话就不再存在,因此无法再访问该会话中的任务。因此,重新启动应用程序后无法恢复挂起的任务,因为该任务不再存在(因为其会话不再存在)。
对于后台会话,您几乎不得不要求基础网络团队中的某个人获得该答案,因为这取决于您在事后可以重新创建会话的程度。但是,我的猜测是,它可能也不会在那里工作,如果确实如此,你应该认为它不受支持。
答案 1 :(得分:1)
在对苹果开发者表格进行一些研究后,我找到了this
任务暂停很少使用,如果是,它主要用于临时禁用回调,作为某种并发控制系统的一部分。那是因为暂停的任务仍然可以在线路上激活;暂停所做的就是阻止它在内部取得进展,发出回调等等。
OTOH,如果你实现了长期暂停(例如,用户想要暂停下载),你最好还是调用-cancelByProducingResumeData:。
因此suspend
可能实际上不会停止下载,我应该使用cancelByProducingResumeData:
进行长期暂停。