2013-12-13 25 views
0

我正在開發一個發送大量http請求(HttpURLConnection)的androi應用程序。一切正常,但我認爲我的對象沒有被釋放。我說,因爲當我看MAT(Eclipse Memory Analyzer)時,它說我保留了很多字節[]。我查看MAT上的字節,它們是我在HttpURLConnection方法中收到的字節。以下是我發送http請求的代碼。還有什麼我可以做的發佈我的對象?如何釋放HttpURLConnection字節?

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; 
     } 
    } 
} 

回答

0

在Java中,你不必擔心內存分配,除非它是你的代碼用它做的問題(OutOfMemoryException異常)的Android不盡快釋放內存,在Android中垃圾回收是一個有點複雜,除非有必要,通常不會取消分配內存。

+0

我很害怕,因爲內存的使用增加了而且從來沒有減少過,但是我沒有任何外掛。你認爲當它接近outofmemory時,垃圾收集將取消分配這個字節[]? – user2494863

+0

是的,垃圾收集器的功能就是爲您管理內存。 –

0

我注意到在拋出一個IOEcxeption之後,您不會在catch塊中將其設置爲空,所以您不會調用httpConnection.disconnect。很顯然,當最終阻止運行時,您將無法在其上運行斷開連接,這可能會釋放MAT所抱怨的字節。