iOS后台传输限制

4

我需要下载成千上百个媒体文件的一部分。假设每个下载文件大小为1MB,总共1000个小文件需要下载。在循环中,对于每个文件,我将创建一个下载任务并像以下代码一样恢复它。

            NSUrlSessionDownloadTask downloadTask = session.CreateDownloadTask(request);
            downloadTask.Resume();

任务开始时文件下载正常,问题出现在应用程序进入后台时。
这是我使用的会话配置:
        sessionConfig.AllowsCellularAccess = true;
        sessionConfig.SessionSendsLaunchEvents = true;
        sessionConfig.NetworkServiceType = NSUrlRequestNetworkServiceType.Default;
        sessionConfig.HttpMaximumConnectionsPerHost = 4;
        sessionConfig.Discretionary = false;

以下是我的问题:

  • 代理方法只有在返回应用程序时或所有下载任务完成时才会被调用,这是预期行为吗?返回应用程序将触发数百个事件...而这需要一段时间!

  • NSUrlSession对下载任务的数量有任何限制吗?


我是指在后台任务中触发事件。 - benpage
事件在iOS中是异步处理的,因此无法创建自己的后台任务来处理这些事件。 - nhenrique
我可以问一下为什么你想要将文件分成小块传输,而不是依赖后台获取来下载整个文件吗?这是一个真正的问题;我也有类似的问题需要解决。 - Steve Morgan
我所做的是使用一个变量。如果我仍在进行某些操作,它不会停止。只有在完成后,我才会停止我的计时器。直到再次打开应用程序。 - Eddwin Paz
抱歉,eddwinpaz,我不明白你的意思。这是否意味着你正在使用后台下载? - nhenrique
显示剩余3条评论
1个回答

0

我不久前广泛使用了后台传输(BT),可以说使用 BT 在后台下载/上传一打小文件不是一个选项。

BT 通过独立进程 nsurlsessiond 工作。它的内存强制限制为 40MB(可能取决于 iOS 版本或设备,我不确定)。在您的情况下,由于内存限制,它可能会崩溃。

最佳的 BT 体验可在大文件中实现。使用 NSURLSessionDownloadTask 下载 10 个大小为 100 MB 的文件将更加有效。您可以尝试同时下载它们或一个接一个地下载(您也可以在 BG 中执行此操作)。

关于代理...我会说,当它完成下载时,它可以在 BG 中启动您的应用程序..或者如果 BT 守护程序由于某种原因(内存限制)无法打开您的应用程序,则可以在手动启动应用程序时获取所有代理。无论哪种情况,您都应该做好准备。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接