ios - 上传文件后是否可以运行代码,NSURLSession 配置为 backgroundSessionConfiguration

标签 ios iphone nsurlsession nsurlsessionconfiguration

我喜欢通过以下方法在 backgroundSessionConfiguration 中使用 NSURLSession:

uploadTaskWithRequest:fromFile:

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

所以递归上传一堆文件

你知道这是否可能吗?

最佳答案

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

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

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

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

希望对您有所帮助。

关于ios - 上传文件后是否可以运行代码,NSURLSession 配置为 backgroundSessionConfiguration,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19998895/

相关文章:

iphone - CGImageGetBytesPerRow() 在 iOS 模拟器和 iOS 设备上返回不同的值

ios - 如何检测和使UILabel中的超链接/提及/标签可点击?

iphone - 如何将非对象数据类型包装在 NSValue 对象中?

ios - 如何使用带有 NSURLSessionDownloadTask 的 restclient dropbox API 下载文件

iphone - 打开项目时 Xcode 4 崩溃

iPhone:从 NSURL 加载图像时出现问题

iphone - 使用 Xamarin.iOS (MonoTouch) 进行网格布局的 UICollectionView?

macos - 从 Swift 命令行程序使用 NSURLSession

ios - NSUrlSession 在 Swift 中运行缓慢

iphone - MKMapView 不更新用户位置图像