下载大尺寸zip文件时出现SocketException

时间:2013-06-11 16:27:55

标签: android download

我正从服务器下载一个大尺寸的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方法下载文件。

5 个答案:

答案 0 :(得分:4)

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

另一方面,您可以(如果您还没有)尝试DownloadManager。正如this official article on wakelocks所述,

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

答案 1 :(得分:3)

如果您正在使用HttpConnection,请增加超时

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

con.setReadTimeout(10000);

OR

HttpConnectionParams.setSoTimeout(httpParameters,10000); //

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

以下链接可能对您有用

Android download large files

Android - Large file downloads stop - using async/progressdialog

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

答案 4 :(得分:0)

要使用HTTP服务器,我强烈建议您使用Loopj库,它是一个可靠,简单且易于使用的库。 正如文档所说,你可以像这样下载一个文件:

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
    }
});