Android HttpClient垃圾收集问题

时间:2014-06-02 13:05:51

标签: java android garbage-collection apache-httpclient-4.x

以下编辑

我正在编写一个从网页中抓取内容的应用程序,但是我遇到了一个问题,即获取相对较大(但仍然非常小)的页面正在抨击我的设备的垃圾收集并花费很长时间才能完成

这是我的代码:

// Execute URL.
httpClient = new DefaultHttpClient();
HttpContext httpContext = new BasicHttpContext();
HttpGet httpGet = new HttpGet(url);
HttpResponse httpResponse = httpClient.execute(httpGet, httpContext);

// Get response data.
BufferedReader reader = new BufferedReader(new InputStreamReader(httpResponse.getEntity().getContent()));
String result = "";
String line = null;
while((line = reader.readLine()) != null)
{
    result += line;
}
httpClient.getConnectionManager().shutdown();

以下是导致问题的网址示例: http://mangafox.me/manga/one_piece/

违规行似乎是httpClient.execute(httpGet,httpContext)行。

以下是我的日志快速填满的小片段:

GC_CONCURRENT freed 3275K, 46% free 4159K/7700K, paused 40ms+14ms, total 102ms
WAIT_FOR_CONCURRENT_GC blocked 60ms
GC_CONCURRENT freed 665K, 47% free 4087K/7700K, paused 14ms+18ms, total 106ms
WAIT_FOR_CONCURRENT_GC blocked 94ms

我想,由于我的经验不足,我的应用程序缺少大量优化,考虑到我的手机浏览器能够正常加载网址。

感谢您的帮助。

修改

我通过使用StringBuilder改进了我的代码,我之前错误地认为它会被Java自动使用。结果我的应用程序效果好了。

我的代码现在如下:

StringBuilder builder = new StringBuilder();
String line = null;
while((line = reader.readLine()) != null)
{
    builder.append(line);
}

对于line = reader.readLine()行,是否还有其他改进?

0 个答案:

没有答案