0

多くの http リクエスト (HttpURLConnection) を送信するアンドロイ アプリを開発しています。すべてが機能していますが、オブジェクトが解放されていないと思います。MAT (Eclipse Memory Analyzer) を見ると、多くの byte[] が保持されていると表示されるためです。MAT のバイトを調べると、HttpURLConnection メソッドで受け取ったバイトです。以下は、http リクエストを送信するための私のコードです。オブジェクトを解放するために他にできることはありますか?

public static String sendHTTPRequest(String requestURL, int timeout) {
    HttpURLConnection httpconn = null;
    try {

        URI uri = new URI(getUTF8Request(requestURL));

        httpconn = (HttpURLConnection) uri.toURL().openConnection();
        httpconn.setConnectTimeout(timeout);
        StringBuilder responseStringBuilder = new StringBuilder();

        if (httpconn.getResponseCode() == HttpURLConnection.HTTP_OK) {
            BufferedReader input = new BufferedReader(
                    new InputStreamReader(httpconn.getInputStream(),
                            "ISO-8859-1"), 8192);
            String strLine = null;
            while ((strLine = input.readLine()) != null) {
                responseStringBuilder.append(strLine);
            }
            input.close();
            strLine = null;
            input = null;
        }

        return responseStringBuilder.toString();
    } catch (URISyntaxException e) {
        httpconn = null;
        return "Failed to request";
    } catch (IOException e) {
        httpconn = null;
        return "Failed to request";
    } finally {

        requestURL = null;
        if (httpconn != null) {
            httpconn.disconnect();
            httpconn = null;
        }
    }
}
4

2 に答える 2

0

catch ブロックで null を設定しているためhttpConnection.disconnect、がスローされた後に呼び出されないことに気付きました。IOEcxeption明らかに、最終的にブロックが実行されると、切断を実行できなくなります。これにより、MAT が不満を言っているバイトが解放される可能性があります。

于 2013-12-14T06:44:38.963 に答える
0

Java では、問題 (outofmemoryexception) でない限り、メモリの割り当てについて心配する必要はありません。Android は、コードが完了するとすぐにメモリを解放しません。Android のガベージ コレクションは少し複雑で、通常はそうではありません。 t 必要がない限り、割り当てられたメモリの割り当てを解除します。

于 2013-12-13T21:25:39.560 に答える