El siguiente código funciona básicamente como se esperaba. Sin embargo, para ser paranoico, me preguntaba, para evitar la fuga de recursos,Necesito llamar a HttpURLConnection.disconnect después de terminar de usarlo
- ¿Es necesario llamar
HttpURLConnection.disconnect
, después de terminar su uso? - ¿Debo llamar al
InputStream.close
? - ¿Debo llamar al
InputStreamReader.close
? - ¿Necesito tener las 2 siguientes líneas de código:
httpUrlConnection.setDoInput(true)
yhttpUrlConnection.setDoOutput(false)
, justo después de la construcción de httpUrlConnection?
La razón por la que pregunto es por la mayoría de los ejemplos que vi que no hacen tal limpieza. http://www.exampledepot.com/egs/java.net/post.html y http://www.vogella.com/articles/AndroidNetworking/article.html. Solo quiero asegurarme de que esos ejemplos sean correctos también.
public static String getResponseBodyAsString(String request) {
BufferedReader bufferedReader = null;
try {
URL url = new URL(request);
HttpURLConnection httpUrlConnection = (HttpURLConnection)url.openConnection();
InputStream inputStream = httpUrlConnection.getInputStream();
bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
int charRead = 0;
char[] buffer = new char[1024];
StringBuffer stringBuffer = new StringBuffer();
while ((charRead = bufferedReader.read(buffer)) > 0) {
stringBuffer.append(buffer, 0, charRead);
}
return stringBuffer.toString();
} catch (MalformedURLException e) {
Log.e(TAG, "", e);
} catch (IOException e) {
Log.e(TAG, "", e);
} finally {
close(bufferedReader);
}
return null;
}
private static void close(Reader reader) {
if (reader != null) {
try {
reader.close();
} catch (IOException exp) {
Log.e(TAG, "", exp);
}
}
}
Gracias. ¿Crees que hay errores en los dos enlaces de tutoriales anteriores dado que no llaman desconexión? ¿O me estoy perdiendo algo? –
No digo que sea un error. Pero, la desconexión es un caso extremo (las operaciones de apertura de socket son costosas), a menos que realmente quieras, yo no iría por ello. stream.close() libera la mayoría de los recursos de red y debería ser suficiente. De nuevo, si su requisito está bien para crear un socket cada vez, no hay nada de malo en desconectar llamadas. – kosa
Seguiré haciendo solicitudes frecuentes a casi el mismo servidor, y la fuga de memoria es mi única preocupación. Si entiendo la documentación correctamente, no es necesario llamar a desconexión en mi caso. –