Android Java Gallery内存不足错误

时间:2011-01-04 23:16:50

标签: java android gallery

所以我正在从SD卡将图像加载到Android Gallery中。我点击菜单,然后选择,它通过下面的代码插入到Gallery中。问题是在大约5或6个图像后我得到内存不足错误01-04 18:10:3​​5.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;  
    }     

2 个答案:

答案 0 :(得分:0)

要插入图库的图像的宽度和高度(以像素为单位)是多少?如果它们非常大,可能是500x500或更大,那么我建议将它们调整为更小,更接近你想要的尺寸120x120,然后再将它们添加到图库中。

您可以使用Bitmap.createScaledBitmap方法缩小它们。

编辑:请注意,这与使用ImageView进行缩放不同。 ImageView将在显示时缩放位图,但将原始位图保留在堆内存中。如果你使用createScaledBitmap并抛弃原始位图,那么你将节省大量的堆。

答案 1 :(得分:-1)

尽量避免使用

private Context mContext;

将Context / Activity存储为类的私有成员是非常糟糕的做法。建议仅使用参数的上下文/活动。存储Context的典型结果是内存泄漏,我相信它会演示您的代码。更多你可以read here.