上传 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 委托跨类拆分 - NSURLSession、NSURLUploadTask、NSURLDownloadTask