我正在使用android.support.v4.app.Fragments,我必须填写一张图片列表,我得到它们作为字节数组,
这是我的代码
final NewSite site = data.get(position);
if(null != site.getImage()){
bmp = BitmapFactory.decodeByteArray(site.getImage(), 0, site.getImage().length, options);
holder.image.setImageBitmap(bmp);
}
if(null != site.getDescription())
holder.informations.setText(site.getDescription() + " " + position);
if(site.getListOfChildren() != null && site.getListOfChildren().size() != 0){
Log.i("BitmapFactory", site.getListOfChildren().size() + "");
for (NewSite newSite : site.getListOfChildren()) {
if(null != newSite.getImage()){
bmp = BitmapFactory.decodeByteArray(newSite.getImage(),0,newSite.getImage().length, options);
view = new ImageView(context);
view.setLayoutParams(new LayoutParams(30, 20));
view.setPadding(2, 0, 2, 2);
view.setImageBitmap(bmp);
holder.listOfImages.addView(view);
bmp = null;
//view = null;
}
我总是得到OutOfMemoryError Exception
答案 0 :(得分:1)
我会显示图片的subsampled版本(如果您还没有这样做,您的选项代码不在您的问题中),这会占用更少的内存,因为它会降低质量Bitmap
的。{点击后,您始终可以显示Bitmap
的更高版本。
我在我的一个应用程序中使用此代码对图像进行二次采样,以便我不会耗尽内存。
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize = yourSampleSize;
Bitmap returnBmp = BitmapFactory.decodeFile(imgFile.getAbsolutePath(), o2);
希望这可以帮助您找到解决方案。 Bitmap
处理的内存不足问题永远不会有趣。