2013-12-13 3 views
0

많은 HTTP 요청 (HttpURLConnection)을 보내는 안드로이드 앱을 개발 중입니다. 모든 것이 작동하지만 내 물건이 풀려나 지 않은 것 같습니다. 내가 매트 (이클립스 메모리 분석기)를 보면, 나는 많은 바이트 []가 남아 있기 때문에 그렇게 말하고있다. MAT의 바이트를 살펴보면 HttpURLConnection 메서드에서받는 바이트입니다. 아래는 HTTP 요청을 보내는 코드입니다. 물건을 내놓을 수있는 다른 방법이 있습니까? 그것은 당신의 코드가 그것으로 수행되는 것처럼 문제 (에서 OutOfMemoryException) 안드로이드는 즉시 메모리를 해제하지 않는 경우를 제외하고 자바에서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

당신은 메모리 할당에 대해 걱정할 필요가 없습니다, 안드로이드에서 쓰레기 수거는이다 조금 복잡하고 일반적으로 할당 된 메모리는 필요하지 않으면 할당을 해제하지 않습니다.

+0

메모리 사용이 증가하고 결코 감소하지 않기 때문에 나는 두려웠지만 어떤 메모리 부족도 없었습니다. 당신이 outofmemory에 가까울 때 가비지 컬렉션은이 바이트 []를 할당 해제 할 것이라고 생각합니까? – user2494863

+0

예, 가비지 수집기가하는 일로, 메모리를 관리합니다. –

0

IOEcxeption이 던져지면 httpConnection.disconnect을 호출하지 않을 것입니다. catch 블록에서 null로 설정했기 때문입니다. 분명히 마침내 블록을 실행하면 연결 끊기를 실행할 수 없으며, 아마도 MAT가 불평하는 바이트를 릴리스 할 것입니다.