HttpURLConnection連接超時問題


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); 
 
參考連接:https://blog.csdn.net/jackson_wen/article/details/51923514


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM