当我在gridview中滚动时,会出现内存不足错误

时间:2015-03-09 10:21:39

标签: android gridview imageview

当我在完成此任务后将图像放入网格视图中时,图像在我的网格视图中成功加载,但是当我向下滚动时,它会在logcat中引发内存不足错误。

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    ImageView iv;
    if(convertView==null)
    {
        iv= new ImageView(mcontext);
        WindowManager wm =    (WindowManager)mcontext.getSystemService(Context.WINDOW_SERVICE);
        Display display = wm.getDefaultDisplay();
        int height=display.getHeight()/2;
        int width=display.getWidth()/2;
        iv.setLayoutParams(new GridView.LayoutParams(width,width));
        iv.setScaleType(ImageView.ScaleType.CENTER_CROP);
    }
    byte[] stringimage = Base64.decode(images.get(position),Base64.DEFAULT);
    iv.setImageBitmap(BitmapFactory.decodeByteArray(stringimage,0,stringimage.length));
    return iv;
}

1 个答案:

答案 0 :(得分:0)

嗯,这个问题正是你所期望的。 Android为您的程序分配一些内存。滚动网格时,可能需要更多空间来放置新图像。如果您的图像太大,可能会耗尽内存。

尝试在将整个内容加载到内存之前减小Bitmap的大小。

您可以使用BitmapFactory.Options请求使用inJustDecodeBounds将图像加载到内存中。这将告诉您图像的大小,您可以根据需要进行缩放。

这样的事情:

    BitmapFactory.Options options = new BitmapFactory.Options();

    //inJustDecodeBounds as true ensures bitmap is not loaded into memory
    options.inJustDecodeBounds = true;
    BitmapFactory.decodeFile(somePath, options);
    int width= options.outWidth;
    int height= options.outHeight;

现在您有高度和宽度,并且可以尝试确定图像是否对于其imageview来说太大。请记住,虽然使用相机拍摄的照片可能类似于1920x1080像素,但您的图像视图可能只显示200x100像素或其他内容。没理由加载所有像素。