Il seguente codice funziona fondamentalmente come previsto. Tuttavia, per essere paranoico, mi chiedevo, per evitare perdite di risorse,Devo chiamare HttpURLConnection.disconnect dopo averlo terminato usando
- Devo chiamare
HttpURLConnection.disconnect
, dopo l'arrivo il suo utilizzo? - Devo chiamare
InputStream.close
? - Devo chiamare
InputStreamReader.close
? - È necessario disporre della seguente riga di codice 2:
httpUrlConnection.setDoInput(true)
ehttpUrlConnection.setDoOutput(false)
, subito dopo la costruzione di httpUrlConnection?
Il motivo per cui lo chiedo è che la maggior parte degli esempi che ho visto non eseguono tale pulizia. http://www.exampledepot.com/egs/java.net/post.html e http://www.vogella.com/articles/AndroidNetworking/article.html. Voglio solo assicurarmi che anche quegli esempi siano corretti.
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);
}
}
}
Grazie. Pensi che ci siano degli errori nei due link tutorial sopra riportati dato che non chiamano disconnect? O mi sta sfuggendo qualcosa? –
Non dico che sia un errore. Ma la disconnessione è un caso estremo (le operazioni di chiusura delle porte aperte sono costose), a meno che tu non voglia davvero non farlo. stream.close() rilascia la maggior parte delle risorse di rete e dovrebbe essere sufficiente. Di nuovo, se il tuo requisito è ok per creare socket ogni volta, non c'è nulla di sbagliato nel chiamare la disconnessione. – kosa
Continuerò a fare richieste frequenti a un server quasi identico, e la perdita di memoria è la mia unica preoccupazione. Se capisco correttamente la documentazione, nel mio caso non è necessario chiamare la disconnessione. –