在gridview中使用Universal Image Loader时出现OutOfMemoryError

时间:2013-02-14 07:35:00

标签: universal-image-loader

我有大约53张图片要在drwable的gridview中显示。但是这样做的时候我就是这么做的。所以我开始使用通用图像加载器将这些图像缓存到光盘上并从那里拉出来。但我还是得到了oom。 这是我的配置

 imageLoader =ImageLoader.getInstance();
                if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED))
                    cacheDir=new File(android.os.Environment.getExternalStorageDirectory(),"icons");
                else
                    cacheDir=mContext.getCacheDir();
                if(!cacheDir.exists())
                    cacheDir.mkdirs();
                config= new ImageLoaderConfiguration.Builder(mContext)
                .memoryCache(new WeakMemoryCache())
                .denyCacheImageMultipleSizesInMemory()
                .threadPoolSize(2)
                .offOutOfMemoryHandling()
            .discCache(new UnlimitedDiscCache(cacheDir))
                .enableLogging()
                .build();
                imageLoader.init(config);

options = new DisplayImageOptions.Builder()
                .cacheOnDisc()
                .bitmapConfig(Bitmap.Config.RGB_565)
                .imageScaleType(ImageScaleType.IN_SAMPLE_INT)
                .build();

这是我的BaseAdapter的getview()

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



        if(convertView==null)
        {
            ViewHolder holder=new ViewHolder();
            inflator = mContext.getLayoutInflater();
            convertView = inflator.inflate(R.layout.imagelayout, null);
            holder.imageView=(ImageView)convertView.findViewById(R.id.imgDet);
            convertView.setTag(holder);

        }
        ViewHolder hold=(ViewHolder)convertView.getTag();



        try
        {

            imageLoader.displayImage("drawable://" +mThumbIds[position], hold.imageView, options,new ImageLoadingListener() {

                @Override
                public void onLoadingStarted(String arg0, View arg1) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void onLoadingFailed(String arg0, View arg1, FailReason arg2) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void onLoadingComplete(String arg0, View arg1, Bitmap arg2) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void onLoadingCancelled(String arg0, View arg1) {
                    // TODO Auto-generated method stub

                }
            });

        }catch(OutOfMemoryError oom)
        {
            oom.printStackTrace();
        }
        catch(Exception ex)
        {
            ex.printStackTrace();
        }


        return convertView;
    }

请帮助我。

1 个答案:

答案 0 :(得分:0)

始终考虑首先加载drawable的本地方式。

ImageView.setImageResource(...)而非使用ImageLoader