Утечка ресурсов при выполнении http-вызова

Я получаю сообщение об ошибке ниже, когда я выполняю этот код.

Ресурс был получен в прикрепленной трассировке стека, но никогда не освобождался. См. java.io.Closeable для получения информации о предотвращении утечек ресурсов.:

Я не могу определить утечку ресурсов в приведенном ниже коде. Я буду признателен, если кто-нибудь укажет, что на самом деле я делаю неправильно.

HttpPost request = new HttpPost(url);
        StringBuilder sb = new StringBuilder();
        StringEntity entity = new StringEntity(jsonString);
        entity.setContentType("application/json;charset=UTF-8");
        entity.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json;charset=UTF-8"));
        request.setHeader("Accept", "application/json");
        request.setEntity(entity);

        HttpResponse response = null;
        DefaultHttpClient httpclient = getHttpClientImpl();

        BufferedReader reader = null;
        InputStream in = null;
        try {
            response = httpclient.execute(request);
            in = response.getEntity().getContent();
            reader = new BufferedReader(new InputStreamReader(in));
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception se) {
            Log.e("Exception", se + "");
            throw se;
        } finally {
            if (in != null)
                in.close();

            if (reader != null)
                reader.close();

            if (client != null && client.getConnectionManager() != null) {
        client.getConnectionManager().shutdown();
    }
        }
        return sb.toString();

person muneikh    schedule 10.12.2012    source источник


Ответы (1)


Я действительно не вижу никаких проблем с этим кодом, но я рекомендую закрыть все простаивающие соединения в пуле.

public abstract void closeIdleConnections (long idletime, TimeUnit tunit)

Кроме того, существуют некоторые известные проблемы с DefaultHttpClient, когда он не полностью настроен правильно. Я рекомендую использовать AndroidHttpClient как реализацию интерфейса HttpClient. Посетите следующую документацию для объяснения:

http://developer.android.com/reference/android/net/http/AndroidHttpClient.html

person Qkyrie    schedule 10.12.2012