2015-04-01 29 views
0

我在AsyncTask上執行網絡操作;AsyncTask,網絡操作和超時

try {    
    int timeOut = 5000;    
    httpParameters = new BasicHttpParams(); 
    HttpConnectionParams.setConnectionTimeout(httpParameters, timeOut); 

    client = new DefaultHttpClient(httpParameters); 
    request = new HttpGet(URL); 

    response = client.execute(request); 
    in = null; 
    in = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); 

    line = in.readLine(); 
} catch (Exception e) {  
    return "ERROR CONNECTING TO SERVER"; 
} 

我很困擾超時和慢速連接。

如果超過5秒鐘來檢索數據,那麼我會收到超時異常。 據我所知,如果任務沒有在5秒內完成,那麼它會超時,但如果它已經聯繫服務器,並且正在下載超過5秒鐘下載的數據,該怎麼辦?

我不希望將超時設置爲20秒,因爲如果在聯繫服務器時出現問題,等待時間太長。

有沒有另一種方法,我應該這樣做,而不是使用超時?

這可能是我的理解是floiled,並且超時被忽略一旦達到服務器。

回答

0

聯繫服務器後,您將能夠幾乎立即讀取第一部分數據。花費超過1秒鐘傳輸的線路可能是一個小故障。無論如何,超時不會觸發與活動的連接,它意味着開始在停滯的連接上打勾。

請注意,5秒的超時是您的用戶經常會遇到的情況,因此您必須正確處理該情況。要調試超時執行的分支,我建議臨時選擇一個非常小的超時值,以便您可以輕鬆地重現異常。

+0

謝謝你的信息。 所以我正確的是,當服務器到達時,即使服務器需要很長時間來響應,超時也會被忽略。 這是因爲我有時會有大量的數據需要10秒鐘才能下載。 – matty357 2015-04-01 15:11:23