4

我正在开发一个将图像上传到服务器的应用程序,并且我正在使用 background NSURLSessionUploadTasks。这适用于少量上传的图像,例如 10 到 20 张照片。但是,我在尝试一次上传 100 多张图片时遇到了问题。backgroundNSURLSessionUploadTask的可扩展性如何?

当我打电话

NSURLSessionUploadTask *task = [uploadSession uploadTaskWithRequest:request fromFile:fileURL];

反复,它阻塞等待信号量。这是由于与后台上传守护进程通信的往返时间吗?是否等待后台上传守护进程处理其他上传任务?有 100 多张照片,我已经看到这些调用总共阻塞了 40 多秒。此外,一旦这些调用完成,上传需要一段时间才能取得任何进展,并且它们经常一次停止很多秒。

我希望能够设置我的 100 多个上传任务,然后坐下来让 iOS 7 为我处理上传。但是,如果必须,我可以一次只创建几个上传任务。iOS 7 中提供了如此高级的后台上传功能,这似乎是一种耻辱。我还不如NSURLConnection在 iOS 6 下使用。

谢谢你的帮助。

4

3 回答 3

1

NSURLSession 是一个重构和增强的 NSURLConnection,而不是一个神奇的工具。我在使用它时所做的是将未完成的交易限制在一个固定的最大值,比如 4 或 10。在与 Quinn 在 Apple 的私人开发论坛上进行了长时间的交流后,我现在这样做了(如果有兴趣,我可能会挖掘一个链接)。最后,他的观点是苹果不能真正为你做节流,你需要积极管理数字。所以是的,在这方面,6 和 7 之间没有太大区别。

最多使用 4 个连接,我一次获取数百张图像没有问题。

于 2013-11-14T12:28:52.197 回答
0

仅供参考,我报告了令人惊讶的延迟

NSURLSessionUploadTask *task = [uploadSession uploadTaskWithRequest:request fromFile:fileURL];

作为 Apple 的一个错误,并了解到它是 iOS 中一个已知且仍处于开放状态的错误。

为了解决这个问题,我现在NSURLSessionUploadTask在一个单独的线程中创建。为了避免压倒nsnetworkd后台守护进程,我一次将其限制为 300 个任务,这很好。

于 2014-04-03T04:40:59.893 回答
0

我有几个澄清问题,我很抱歉,但它们不适合评论格式。

  1. 您是否使用创建的配置创建会话
    -[NSURLSessionConfiguration backgroundSessionConfiguration:]

  2. 当您的应用程序不在前台时,您的上传是否发生,例如暂停?

于 2014-01-14T16:33:33.247 回答