【问题标题】:Load file on poor connection without download manager or third-party libraries在没有下载管理器或第三方库的情况下加载连接不良的文件
【发布时间】:2016-01-12 19:54:45
【问题描述】:

我写了一些库,它有时应该加载 3-5Mb 的文件。 我尝试使用 HttpURLConnection 但如果从最后一个地方丢失连接,我将无法使用它恢复下载。 我也试过DownloadManager,但它需要DOWNLOAD_WITHOUT_NOTIFICATION,这是不可接受的。没有它,它会在右上角显示加载图标,这也是不可接受的。 我也不能使用第三方库。

是否有任何代码示例如何强制在连接不良(EDGE、过载服务器)或其他一些我可以集成的代码的开源库上工作 HttpURLConnection?

【问题讨论】:

标签: android download android-download-manager


【解决方案1】:

看看Volley。它允许为请求自定义重试策略。您可以实例化一个自定义的DefaultRetryPolicy 并使用setRetryPolicy 将其设置为您的请求。

小心,因为 Volley 将整个下载的块缓存在内存中。

那里可能还有其他库,所以在推出您自己的解决方案之前先检查一下。

如果没有其他东西适合您的需求,您可以将 HTTPUrlConnection 流通过管道传输到文件流并在下载时写入。您需要自己编写逻辑来管理下载状态。首先,您需要提前知道要下载的文件的大小(如果您的服务器向您发送“Content-Length”标头),并且要恢复部分失败的下载,您将打开与同一文件的新连接并从使用 http 范围的最后一个下载字节。

【讨论】:

  • 我尝试了 Volley,但没有成功 - 它返回 onErrorResponse null,在此之前 BasicNetwork.performRequest: Unexpected response code 200
  • 现在我正在测试这几个库,希望能找到一些东西 - android-arsenal.com/tag/179
猜你喜欢
  • 1970-01-01
  • 2021-10-27
  • 2015-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-01
  • 1970-01-01
相关资源
最近更新 更多