当我在完成此任务后将图像放入网格视图中时,图像在我的网格视图中成功加载,但是当我向下滚动时,它会在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;
}
答案 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像素或其他内容。没理由加载所有像素。