java.lang.OutOfMemoryError:位图大小超过listview中的VM预算

时间:2012-06-28 21:53:51

标签: android listview memory-leaks

我在https://stackoverflow.com/a/6779067/1236259线程中尝试了hp.android,但我的活动从未调用onDestroy方法

我有一个带有图像的ListView,我通过以下方式调用其他活动:

ImageButton imageButtonSeeMap = (ImageButton)this.findViewById(R.id.imageButtonSeeMap);
imageButtonSeeMap.setOnClickListener(new OnClickListener() {....

从新活动中我再次调用ListView活动,在这一点上我得到了exeption:java.lang.OutOfMemoryError:位图大小超过VM预算

列表视图中的图像使用以下方式创建:

thumb_u = new URL(lp.get(i).getImage());
            thumb_d = Drawable.createFromStream(thumb_u.openStream(), "src");

            imageViewPoi.setImageDrawable(thumb_d);

如何释放图像的内存?永远不会调用onDestroy方法中的unbindDrawable。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

图像是android中的野兽,所以OutofMemory异常是你可能不得不习惯的东西。这应该允许您的列表视图从Web获取图像,而不是崩溃您的应用程序。

假设第二个代码块来自ListView的适配器getView()方法,请尝试:

try {
    thumb_u = new URL(lp.get(i).getImage());
    thumb_d = Drawable.createFromStream(thumb_u.openStream(), "src");
    imageViewPoi.setImageDrawable(thumb_d);
} catch (OutOfMemoryError e) {
    System.gc();
    thumb_u = new URL(lp.get(i).getImage());
    thumb_d = Drawable.createFromStream(thumb_u.openStream(), "src");
    imageViewPoi.setImageDrawable(thumb_d);
}