Poniższy kod zasadniczo działa zgodnie z oczekiwaniami. Jednak, aby być paranoikiem, zastanawiałem się, aby uniknąć wycieku zasobów,Czy muszę zadzwonić HttpURLConnection.disconnect po zakończeniu korzystania z niego
- Czy muszę zadzwonić
HttpURLConnection.disconnect
, po wykończenie jego użycie? - Czy muszę zadzwonić pod numer
InputStream.close
? - Czy muszę zadzwonić pod numer
InputStreamReader.close
? - Czy muszę mieć następujący 2 wiersz kodu:
httpUrlConnection.setDoInput(true)
ihttpUrlConnection.setDoOutput(false)
, tuż po zbudowaniu httpUrlConnection?
Powód, dla którego tak pytam, to większość przykładów, które widziałem, nie robię takich porządków. http://www.exampledepot.com/egs/java.net/post.html i http://www.vogella.com/articles/AndroidNetworking/article.html. Chcę tylko upewnić się, że te przykłady są poprawne.
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);
}
}
}
Dzięki. Czy sądzisz, że na powyższych dwóch linkach do tutoriala są błędy, ponieważ nie powodują one rozłączenia? Czy może czegoś brakuje? –
Nie mówię, że to pomyłka. Ale rozłączenie jest skrajnym przypadkiem (operacje zamykania gniazd są kosztowne), chyba że naprawdę chcesz, bym tego nie zrobił. stream.close() zwalnia większość zasobów sieciowych i powinno wystarczyć. Ponownie, jeśli twoje wymagania są w porządku, aby utworzyć gniazdo za każdym razem, nie ma nic złego w wywoływaniu rozłączenia. – kosa
Będę często wysyłać prośby do prawie tego samego serwera, a przeciek pamięci to moja jedyna troska. Jeśli dobrze rozumiem dokumentację, nie ma potrzeby wywoływania rozłączenia w moim przypadku. –