10

我正在从服务器下载一个大尺寸的 zip 文件。我越来越关注

06-11 21:45:18.789: I/System.out(8993): java.net.SocketException: recvfrom failed: ETIMEDOUT (Connection timed out)

我的应用程序没有停止,但我的下载停止了。这发生在 hdpi android mobile 上,特别是低处理器设备。下载在 S3 和平板电脑上运行良好。我正在使用简单的 FileOutputStream 方法来下载文件。

4

5 回答 5

4

我想,您应该获得一个 WakeLock 以完成下载,然后释放它。特别是,如果您通过 Wi-Fi 连接下载大文件,通常会获取 WifiLock 以保持无线电保持清醒。

另一方面,您也可以(如果您还没有)尝试DownloadManager。正如这篇关于唤醒锁的官方文章所说,

"如果您的应用正在执行长时间运行的 HTTP 下载,请考虑使用 DownloadManager。 "

于 2014-04-04T18:24:56.067 回答
3

如果您使用的是 HttpConnection 则增加 Timeout

HttpURLConnection con = (HttpURLConnection) url.openConnection();

con.setReadTimeout(10000);

或者

HttpConnectionParams.setSoTimeout(httpParameters, 10000); //

于 2013-06-12T10:35:49.787 回答
1

我不太确定这可能是问题,但有可能。您说这发生在低处理器设备上,可能会发生远程服务器上游比特率太大以至于客户端的下游比特率无法处理的情况,并且对于大文件会发生这种情况,经过一定时间后接收设备可以'不处理比特率,Socket崩溃,你得到那个超时。

我的建议是尝试实施带宽速率限制器。通过这种方式,您可以测试速度较慢的设备是否对那些长时间的下载响应更好,尽管它们会更慢。

于 2014-04-03T12:15:24.497 回答
1

以下链接可能对您有用

安卓下载大文件

Android - 大文件下载停止 - 使用 async/progressdialog

尝试使用 loopj lib 异步下载文件 http://loopj.com/android-async-http/ 我不确定 loopj lib 是否可以下载大文件,但您可以通过反复试验来完成。

于 2014-04-10T08:32:13.427 回答
0

To work with a HTTP server I strongly suggest Loopj library to you, it's a reliable, simple and easy to use library. as documentation said you can download a file simply like this:

AsyncHttpClient client = new AsyncHttpClient();
String[] allowedContentTypes = new String[] { "image/png", "image/jpeg" };
client.get("http://example.com/file.png", new BinaryHttpResponseHandler(allowedContentTypes) {
    @Override
    public void onSuccess(byte[] fileData) {
        // Do something with the file
    }
});
于 2014-04-10T09:31:53.050 回答