所以我正在从SD卡将图像加载到Android Gallery中。我点击菜单,然后选择,它通过下面的代码插入到Gallery中。问题是在大约5或6个图像后我得到内存不足错误01-04 18:10:35.246:错误/ AndroidRuntime(10220):java.lang.OutOfMemoryError:位图大小超过VM预算任何关于我能做什么的想法解决这个问题?
public class ImageAdapter extends BaseAdapter{
int mGalleryItemBackground;
public ImageAdapter(Context c) {
mContext = c;
TypedArray typArray = obtainStyledAttributes(R.styleable.GalleryTheme);
mGalleryItemBackground = typArray.getResourceId(R.styleable.GalleryTheme_android_galleryItemBackground, 0);
typArray.recycle();
}
public int getCount(){
return mUrls.length;
}
public Object getItem(int position){
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent){
ImageView i = new ImageView(mContext);
i.setImageURI(mUrls[position]);
i.setScaleType(ImageView.ScaleType.FIT_XY);
i.setLayoutParams(new Gallery.LayoutParams(120, 120));
return i;
}
private Context mContext;
}
答案 0 :(得分:0)
要插入图库的图像的宽度和高度(以像素为单位)是多少?如果它们非常大,可能是500x500或更大,那么我建议将它们调整为更小,更接近你想要的尺寸120x120,然后再将它们添加到图库中。
您可以使用Bitmap.createScaledBitmap方法缩小它们。
编辑:请注意,这与使用ImageView进行缩放不同。 ImageView将在显示时缩放位图,但将原始位图保留在堆内存中。如果你使用createScaledBitmap
并抛弃原始位图,那么你将节省大量的堆。
答案 1 :(得分:-1)
尽量避免使用
private Context mContext;
将Context / Activity存储为类的私有成员是非常糟糕的做法。建议仅使用参数的上下文/活动。存储Context的典型结果是内存泄漏,我相信它会演示您的代码。更多你可以read here.