iOS后台传输限制

时间:2014-12-15 12:29:43

标签: ios background download xamarin nsurlsession

我需要下载数百个文件的一部分媒体文件。让我们说1000次小下载(每次1mb)。在一个循环中,对于每个文件,我创建一个下载任务并像下面的代码一样恢复它。

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

任务开始正常,文件下载。问题是当应用程序进入后台时。

这是我正在使用的会话配置:

        sessionConfig.AllowsCellularAccess = true;
        sessionConfig.SessionSendsLaunchEvents = true;
        sessionConfig.NetworkServiceType = NSUrlRequestNetworkServiceType.Default;
        sessionConfig.HttpMaximumConnectionsPerHost = 4;
        sessionConfig.Discretionary = false;

这是我的问题:

  • 仅在返回应用程序时调用委托方法。或者当所有下载任务完成时,这是预期的行为吗?回到应用程序将触发数百个事件......这需要一段时间!

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

1 个答案:

答案 0 :(得分:0)

我不久前与背景传输(BT)广泛合作,并且可以说使用BT在后台下载/上传十几个小文件不是一种选择。

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

使用大文件时,可以获得BT的最佳体验。使用NSURLSessionDownloadTask下载10个100 MB大小的文件会更有效。您可以尝试完全下载或逐个下载(您也可以在BG中执行此操作)。

关于代表......我会说它可以在完成下载后在BG中启动你的应用程序..或者你可以在手动启动应用程序时获得所有代表如果BT守护程序由于某种原因未能打开你的应用程序(内存)限制)。无论如何,你应该为任何这些案件做好准备。