¿Necesito llamar a HttpURLConnection.disconnect después de terminar de usarlo

El código siguiente básicamente funciona como se esperaba. Sin embargo, para ser paranoico, me preguntaba, para evitar la fuga de recursos,

  1. ¿Necesito llamar a HttpURLConnection.disconnect , después de terminar su uso?
  2. ¿Necesito llamar a InputStream.close ?
  3. ¿Necesito llamar a InputStreamReader.close ?
  4. ¿Necesito tener la siguiente línea de código 2: httpUrlConnection.setDoInput(true) y httpUrlConnection.setDoOutput(false) , justo después de la construcción de httpUrlConnection?

La razón por la que lo pido, es la mayoría de los ejemplos que vi no hacer tal limpieza. Http://www.exampledepot.com/egs/java.net/post.html y http://www.vogella.com/articles/AndroidNetworking/article.html . Sólo quiero asegurarme de que esos ejemplos son 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); } } } 

Sí, necesita cerrar primero el inputtream y cerrar httpconnection. Según javadoc .

Cada instancia HttpURLConnection se utiliza para realizar una solicitud única, pero la conexión de red subyacente con el servidor HTTP puede ser compartida de forma transparente por otras instancias. Llamar a los métodos close () en el InputStream o OutputStream de una HttpURLConnection después de una solicitud puede liberar recursos de red asociados con esta instancia pero no tiene ningún efecto en ninguna conexión persistente compartida. Llamar al método de desconexión () puede cerrar el socket subyacente si una conexión persistente es por lo demás inactiva en ese momento.

La respuesta a las dos preguntas siguientes depende del propósito de su conexión. Lea este enlace para más detalles.

Creo que el requisito de llamar a setDoInput () o setDoOutput () es asegurarse de que se llamen antes de que algo se escriba o se lea de un flujo en la conexión. Más allá de eso, no estoy seguro de que importe cuándo se llaman esos métodos.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.