如何在app强制退出并重新启动应用程序后恢复NSURLSession下载过程?

Emi*_*Adz 16 ios forceclose nsurlsession nsurlsessiondownloadtask swift

我已实现NSURLSession从我们的服务器下载相当大的文件.现在,只要我在前台或后台工作并返回应用程序,交易正在运行并完成.

但是,如果我使用多任务处理屏幕强制退出应用程序并再次重新打开应用程序.下载过程没有完成,虽然我从文档中了解到它应该,这里的文档说明:

如果iOS应用程序被系统终止并重新启动,则应用程序可以使用相同的标识符来创建新的配置对象和会话,并检索终止时正在进行的传输的状态.此行为仅适用于系统正常终止应用程序.如果用户从多任务屏幕终止应用程序,系统将取消所有会话的后台传输.此外,系统不会自动重新启动用户强制退出的应用程序.在再次开始传输之前,用户必须明确重新启动应用程序.

这意味着如果我再次启动应用程序,强制退出之前的事务应该再次启动,还是它们?我需要提交额外的操作才能使其正常工作吗?

更新:我偶然发现了这个项目:https: //github.com/Heikowi/HWIFileDownload#force-quit

这表明:

强行退出

应用程序被用户杀死后,下载不会在后台继续.在iOS 7(及更高版本)上,将传回恢复数据.

这意味着即使应用程序在后台被用户杀死,也有办法接收恢复数据.只有项目是用Objective-C编写的,我无法理解他们为实现这一目标所做的工作.

Fab*_*ici 25

强行退出之后:

 NSURLSessionTaskDelegate - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error
Run Code Online (Sandbox Code Playgroud)

重新启动应用程序时将调用delegate方法.如果可以恢复下载任务,则错误对象将包含恢复数据:

[error.userInfo objectForKey:NSURLSessionDownloadTaskResumeData].

使用此数据,您可以通过创建以下内容来恢复下载过程NSURLSessionDownloadTask:

(NSURLSessionDownloadTask *)downloadTaskWithResumeData:(NSData*)resumeData.
Run Code Online (Sandbox Code Playgroud)

有关这方面的更多信息,请参阅自定义代表的URL会话的生命周期,步骤13.

  • @GonjiDev这怎么可能?当您的应用恢复时,我们是否要重新关联会话?在被终止时,`NSURLSession`失去对我们的代表的引用,以便能够调用它.编辑:没关系,在这里引用Apple:`创建一个会话配置.对于后台会话,此配置必须包含唯一标识符.存储该标识符,并在应用程序崩溃或被终止或暂停时使用它与会话重新关联.(https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/URLLoadingSystem/NSURLSessionConcepts/NSURLSessionConcepts. HTML) (3认同)