1

我正在使用 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

4

1 回答 1

1

我会显示图像的子采样版本(如果您还没有这样做,那么您的选项代码不在您的问题中),这将占用更少的内存,因为它会降低Bitmap. 单击时,您始终可以显示更高分辨率的版本Bitmap

我在我的一个应用程序中使用此代码对图像进行二次采样,以免内存不足。

BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize = yourSampleSize;

Bitmap returnBmp = BitmapFactory.decodeFile(imgFile.getAbsolutePath(), o2);

希望这可以帮助您找到解决方案。处理内存不足的问题Bitmap从来都不是一件有趣的事。

于 2013-06-10T09:01:54.803 回答