为什么我会收到内存不足的错误提示?

3

我一直收到这个错误提示?

07-25 17:04:00.796: ERROR/AndroidRuntime(420): Caused by: java.lang.OutOfMemoryError
07-25 17:04:00.796: ERROR/AndroidRuntime(420):     at org.apache.http.impl.io.AbstractSessionInputBuffer.init(AbstractSessionInputBuffer.java:79)
07-25 17:04:00.796: ERROR/AndroidRuntime(420):     at org.apache.http.impl.SocketHttpClientConnection.createSessionInputBuffer(SocketHttpClientConnection.java:83)

每次我尝试运行这个方法:

public void getImages() throws IOException{


    DefaultHttpClient httpclient = new DefaultHttpClient();

    HttpGet httppost = new HttpGet("https://sites.google.com/site/theitrangers/images/webImages.txt");
    HttpResponse response;

        response = httpclient.execute(httppost);


            HttpEntity ht = response.getEntity();

            BufferedHttpEntity buf = new BufferedHttpEntity(ht);

            InputStream is = buf.getContent();


            BufferedReader r = new BufferedReader(new InputStreamReader(is));

            StringBuilder total = new StringBuilder();
            String line;
            while ((line = r.readLine()) != null) {
                total.append(line + "\n");

              imageUrl = total.toString();
              Log.v("getImage1", "Retreived image");
            }
     }

这个方法所做的就是从托管在网站上的文本文件中检索URL。

编辑:调试指向我的代码行。当它运行时,我会得到内存不足的错误。

 public void getImages() throws IOException{


    DefaultHttpClient httpclient = new DefaultHttpClient();

    HttpGet httppost = new HttpGet("https://sites.google.com/site/theitrangers/images/webImages.txt");
    HttpResponse response;

**Specifically here:**  response = httpclient.execute(httppost);

请搜索类似的问题。我相信你会找到很多类似的帖子,人们已经讨论过这个问题了。 - Kumar Bibek
能否发布完整的堆栈跟踪信息?很难确定代码中确切有问题的行。但肯定存在内存泄漏。 - Sagar Hatekar
@Sagar Hatekar 在编辑中指向调试的位置发表了帖子。 - yoshi24
VM 不会对你有任何偏见。你之所以遇到 OOM 是因为你的程序可能已经耗尽了内存。:-P - Mukul Goel
2个回答

3

你可能因为在StringBuilder中将应该很大的文本文件加载到内存中而出现OOM错误。你应该将该文件写入本地文件,而不是StringBuilder,以避免该错误。


好的,也许我可以将从文本文档中获取字符串的代码存储在 SQLite 数据库中,并从那里获取。唯一的问题是我经常会更改 URL。我不想在数据库中保留旧 URL,使其增加大小。 - yoshi24
你可以在每次导入时清理数据库。 - Maurício Linhares
1
所引用文件的内容很简单:https://sites.google.com/site/theitrangers/images/ncaa12.jpg。显然不足以导致OOM,即使在我的手表上也不会。 - Lawrence Dol
检查您使用的虚拟机的内存限制,也许它太低了。 - Maurício Linhares
我在我的设备上运行它,所以每次我滑动以查看不同的图像时,当图像离开屏幕并再次滑回时,它会重新获取所有图像。这使用了太多的CPU,导致ANR。 - yoshi24
显示剩余2条评论

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接