1、问题描述

这几天测试重构后的下载框架,发现在下载过程中如果网络中断或网络较差,个别应用的下载就会阻塞卡住,一直卡在 “正在下载 xx%”。
 

2、问题排查和定位

思考:网络差不应该报网络异常的错误或者直接抛timeout异常吗?所以马上去检查Http请求的地方:发现在DownloadThread中使用HttpURLConnection进行网络请求时只是设置了connectTimeout,这样在建立连接的时候如果网络中断,那么超时以后就会报出错误,这里是没有问题的。会不会是还少设置了其他参数的原因呢?
 
于是赶紧去查阅资料:
ConnectTimeout只有在网络正常的情况下才有效,而当网络不正常时,ReadTimeout才真正的起作用,即IdIOHandlerStack 里的 WaitFor 是受ReadTimeout限制的,因此,这2个属性应该结合实用。
 
connect timeout 是建立连接的超时时间;
read timeout,是传递数据的超时时间。
 
正确的方法应当是调用HttpURLConnection的时候同时设置这两个超时时间。
一看代码,果然漏了setReadTimeout。。。。。OMG 。。。
 

3、解决方案

同时设置这两个超时时间:
HttpURLConnection urlCon = (HttpURLConnection)url.openConnection();
urlCon.setConnectTimeout(20*1000);

urlCon.setReadTimeout(20*1000); 

最新文章

  1. EXCEL中对1个单元格中多个数字求和
  2. [NHibernate]Parent/Child
  3. android最常用的退出方法
  4. shell命令
  5. UVa(247),Floyd做传递闭包
  6. easyUI之Form(表单)组件
  7. gulp 实践
  8. 《ACM国际大学生程序设计竞赛题解I》——6.10
  9. 如何在AD6(altium designer 6.x)中设置PCB大小
  10. Java DES 加密和解密源码(转)
  11. iOS相机去黑框
  12. 使用Emacs:生存篇
  13. CentOS下架设VNC服务器
  14. API测试自动化——基于CDIF的SOA基本功能(实例篇)
  15. 通过Struts了解MVC框架,兼说如何在面试中利用Struts证明自己
  16. golang命令行库cobra的使用
  17. selenium中CSS选择器定位
  18. luogu 2051 中国象棋
  19. lsb_release command not found
  20. Python-str-操作-6

热门文章

  1. Xcode6中手动添加Precompile Prefix Header
  2. 快速切题 sgu134.Centroid 树形dp
  3. 1、lambda表达式
  4. Hibernate查询视图返回null问题说明及解决办法
  5. java.io.File中的 pathSeparator 与separator 的区别
  6. java IO 学习(三)
  7. React Native入门指南
  8. GPU Memory Usage占满而GPU-Util却为0的调试
  9. 2065212Java实验四android开发基础
  10. 渐进式 jpg 和 交错式 gif png 提高图片站体验