在 iOS 上下载失败比在 Android 上更频繁?

Posted

技术标签:

【中文标题】在 iOS 上下载失败比在 Android 上更频繁?【英文标题】:Downloading fails much more frequently on iOS than on Android? 【发布时间】:2012-12-24 03:42:57 【问题描述】:

在我的 ios 项目中,我使用 NSURLConnection 下载文件。我的代码就像http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/URLLoadingSystem/Tasks/UsingNSURLConnection.html 文档一样。 在我团队的 android 项目中,我们使用 Android 的 API 下载相同的文件。也没什么特别的。 iOS 和 Android 项目都有相同的失败重试机制,它们都向服务器发送相同的统计数据。 他们尝试下载的文件在 1M 到 10M 之间。

统计服务器显示,对于相同的URL,在安卓上下载失败率为2%,而在iOS上为20%!由于他们试图下载相同的 URL,这似乎不是服务器的问题,而更像是客户端的问题。

为什么 iOS 下载会如此频繁地失败?我应该为 iOS 使用任何特殊的 API,以使下载变得健壮吗?目前我正在使用NSURLConnection,我刚刚发现NSURLDownloader 写文件更方便。它们的下载成功率会有所不同吗?

附:我得到的错误 - (void) connection: (NSURLConnection *) connection didFailWithError: (NSError *) , is usually -1005, NSURLErrorNetworkConnectionLost.

【问题讨论】:

你的代码不会有问题吧? 您确定这是 20% 的实际失败,而不是 20% 的用户中止吗? 我们已经仔细检查了几次代码,我很确定没有什么特别之处。 内存泄漏或内存不足怎么办?我们没有关于您如何处理下载的信息。 隐含在所有这些问题中,这样的失败率是不寻常的。尽管你保证,代码可能是罪魁祸首。您可能应该分享您的下载代码。 【参考方案1】:

我建议您进一步了解为什么您会收到 NSURLErrorNetworkConnectionLost。即使您的设备显示已连接,有时它也可能会断开连接并在指标相应更新之前尝试重新连接。

这是了解有关更好地处理可达性的更多信息的良好起点。 Checking For Internet Connectivity in Objective C

否则,我建议您发布与下载相关的代码,以便其他人可以查找可能的问题。

【讨论】:

以上是关于在 iOS 上下载失败比在 Android 上更频繁?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Charles Proxy 在 iOS13 上下载 apple-app-site-association 文件失败

在 maps.google.com 上的缩放比在 Google Maps API v3 上更流畅

在 Android 上下载文件时未检测到 0 字节文件

如何在Android studio上运行从github上下载的RN项目

Unity 应用在 IOS 上比在 Android 上使用更多的内存

在推送通知 Android 上下载文件