Android中的图库出现内存不足错误

时间:2011-12-16 01:38:11

标签: android gallery

我的代码:

@Override
public View getView(int position, View convertView, ViewGroup parent) {  
ImageView iv = new ImageView(mContext); 
Drawable photo = new BitmapDrawable(loadBitmap(URL));
iv.setImageDrawable(photo);
iv.setScaleType(ImageView.ScaleType.CENTER_INSIDE);  
return iv; 
}

private Bitmap loadBitmap(String url) {
try {
Bitmap bm = BitmapFactory.decodeStream((InputStream)this.fetch(url));
return bm;
}
catch(Exception e) {
e.printStackTrace();
return null;
}
} 

public Object fetch(String address) {
try {
URL url = new URL(address);
Object content = url.getContent();
return content;
}
catch(Exception e) {
e.printStackTrace();
}
return this;
}

我尝试在图库中查看大约100张带网址的照片。 但是当查看大约10张照片时,发生了内存不足错误。 我该怎么做才能避免错误?

我尝试修改getView(),如下所示。

@Override
public View getView(int position, View convertView, ViewGroup parent) {  
ImageView iv = new ImageView(mContext); 
InputStream is = (InputStream)this.fetch(URL);
Drawable photo = Drawable.createFromStream(is, "src");
iv.setImageDrawable(photo);
iv.setScaleType(ImageView.ScaleType.CENTER_INSIDE);  
return iv; 
}

内存问题仍然存在。 第java.lang.OutOfMemoryError: bitmap size exceeds VM budget行的错误消息为Drawable photo = Drawable.createFromStream(is, "src");

2 个答案:

答案 0 :(得分:5)

这是一个众所周知的问题,Galley不回收视图,有不同的自定义实现" eco"画廊。

看看这个SO post

答案 1 :(得分:1)

这是位图和内存的已知问题。有一点可以肯定的是你必须相应地回收位图。或者根本不使用位图。这是您的问题的解决方案。您可以直接从url创建drawable,而不是从位图创建drawable。

使用以下代码创建drawable。

        InputStream is = (InputStream) new URL(url).getContent();
        Drawable photo = Drawable.createFromStream(is, "src name");