HttpURLConnection连接超时问题
1、问题描述
这⼏天测试重构后的下载框架,发现在下载过程中如果⽹络中断或⽹络较差,个别应⽤的下载就会阻塞卡住,⼀直卡在 “正在下载 xx%”。
2、问题排查和定位
思考:⽹络差不应该报⽹络异常的错误或者直接抛timeout异常吗?所以马上去检查Http请求的地⽅:发现在DownloadThread中使⽤HttpURLConnection进⾏⽹络请求时只是设置了connectTimeout,这样在建⽴连接的时候如果⽹络中断,那么超时以后就会报出错误,这⾥是没有问题的。会不会是还少设置了其他参数的原因呢?
于是赶紧去查阅资料:
ConnectTimeout只有在⽹络正常的情况下才有效,⽽当⽹络不正常时,ReadTimeout才真正的起作⽤,即IdIOHandlerStack ⾥的 WaitFor 是受ReadTimeout限制的,因此,这2个属性应该结合实⽤。
connect timeout 是建⽴连接的超时时间;
connect下载
read timeout,是传递数据的超时时间。
正确的⽅法应当是调⽤HttpURLConnection的时候同时设置这两个超时时间。
⼀看代码,果然漏了setReadTimeout。。。。。OMG 。。。
3、解决⽅案
同时设置这两个超时时间:
HttpURLConnection urlCon = (HttpURLConnection)url.openConnection();
urlCon.setConnectTimeout(20*1000);
urlCon.setReadTimeout(20*1000);
参考连接:blog.csdn/jackson_wen/article/details/51923514

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。