上传 NSURLSession 配置为 backgroundSessionConfiguration 的文件后是不是可以运行代码

Posted

技术标签:

【中文标题】上传 NSURLSession 配置为 backgroundSessionConfiguration 的文件后是不是可以运行代码【英文标题】:Is it possible to run code after uploading a file with NSURLSession configured as backgroundSessionConfiguration上传 NSURLSession 配置为 backgroundSessionConfiguration 的文件后是否可以运行代码 【发布时间】:2013-11-15 10:28:29 【问题描述】:

我喜欢在 backgroundSessionConfiguration 中使用 NSURLSession 的方法:

uploadTaskWithRequest:fromFile:

但我需要在上传后运行一些代码来选择下一个文件。选择后,我想再次启动 NSURLSession 以使用 uploadTaskWithRequest:fromFile: 方法上传它

所以递归上传一堆文件

你知道这是否可能吗?

【问题讨论】:

你实现了委托方法吗?应用程序委托方法? application:handleEventsForBackgroundURLSession:completionHandler: 听起来像你需要的。 【参考方案1】:

简短的回答是肯定的,这是可能的。您有 30 秒的时间来执行此操作。

    无论您运行什么代码,您都必须确保在后台重新启动应用程序时它会运行。即处理内存中的所有内容被丢弃并重新初始化它们。这是因为当您的应用程序在后台运行时,如果用户正在运行其他内存密集型应用程序,您的应用程序将由于内存压力而被杀死。然而,内存压力的终止仍然会导致您的应用程序在 NSURLSession 任务完成后的某个时间点被唤醒。

    我不会推荐它。根据我的经验,像这样一次一个地链接上传请求是非常无效的,因为您每次上传都在等待应用程序被唤醒一次。唤醒应用程序的成本很高,而且根本不会经常或可靠地发生。这取决于用户的使用行为,而不是您上传的状态。

我的建议是将您的 NSURLSession 配置配置为串行(如果您希望它在每个主机一次处理一个任务,我认为如果它们连接到不同的主机,您实际上不能串行化任务。)然后提交所有一次上传任务,让 nsnetworkd 负责安排和提交它们。以我的经验,这是更可靠和更快的数量级。

希望对您有所帮助。

【讨论】:

你能把 NSURLSession 配置成串行的吗?我不知道有这样的设置? 每个主机都可以。 NSURLSessionConfiguration 有一个名为 HTTPMaximumConnectionsPerHost 的设置。如果将其设置为 1,则可以保证一次连接一个连接,但只能连接到该主机,因此我的上述答案。希望对您有所帮助。

以上是关于上传 NSURLSession 配置为 backgroundSessionConfiguration 的文件后是不是可以运行代码的主要内容,如果未能解决你的问题,请参考以下文章

iOS NSURLSession 实现网络请求-文件下载-上传-后台下载

iOS NSURLSession 实现网络请求-文件下载-上传-后台下载

NSURLSession 后台配置在 macOS 上的好处

NSURLSession的文件上传

NSURLSession 委托跨类拆分 - NSURLSession、NSURLUploadTask、NSURLDownloadTask

NSURLSession:后台崩溃,因为没有调用上传委托