Mam następujący blok kodu:Dlaczego wartość timeout nie jest przestrzegana przez android HttpURLConnection?
try {
URL url = new URL("http://site-to-test.com/nonexistingpage.html");
HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
urlc.setRequestProperty("User-Agent", CoreProtocolPNames.USER_AGENT);
urlc.setRequestProperty("Connection", "close");
urlc.setConnectTimeout(500); // timeout is in milliseconds
urlc.connect();
if (urlc.getResponseCode() == 404) {
// Server was reachable
Log.i(TAG, "Server is reachable");
}
} catch (MalformedURLException mue) {
Log.e(TAG, "MalformedURLException: " + mue.getMessage());
} catch (IOException e) {
Log.e(TAG, "IOException: " + e.getMessage());
}
Kiedy domena site-to-test
nie jest osiągalny za pośrednictwem istniejącej sieci, kod ten blokuje przez około 30-40 sekund zanim otrzymaniu IOException
. I specjalnie ustawiłem wartość limitu czasu na 500ms. Czego tu mi brakuje? Czy powyższy blok nie powinien kończyć się w pół sekundy, niezależnie od stanu sieci i dostępności strony?
można użyć TimerTask i Timer razem, aby ustawić limit .... –
BTW, robisz to na oddzielnym "Thread" (lub 'AsyncTask'), prawda? –
Tak, Alex, nie marzyłbym o zablokowaniu wątku interfejsu użytkownika. –