使用图像管理大型GridView(OutOfMemoryException)

时间:2014-09-10 10:17:33

标签: android gridview universal-image-loader

我有一个GridView,它必须加载很多带有图像的项目(大约300个),这些图像是使用UniversalImageLoader从Internet下载的。我遇到的问题是内存(OutOfMemoryException)。

这是我的适配器的代码:

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


    View v = convertView;

    ViewHolder vh = null;
    if (v == null) {
        v = View.inflate(context, R.layout.item_gridview, null);

        vh = new ViewHolder();
        vh.imageView = (ImageView) v.findViewById(R.id.imagenCategoria);

        v.setTag(vh);  

        TextView nombreElemento = (TextView) v.findViewById(R.id.nombreElemento);
        nombreElemento.setText(elementos.get(position).getTitulo());

        TextView infoElemento = (TextView) v.findViewById(R.id.infoElemento);
        infoElemento.setText(elementos.get(position).getCalidad()+"  "+elementos.get(position).getLenguaje()+"  "+elementos.get(position).getAnho());



    }else {
        vh = (ViewHolder)v.getTag();
    }

    ImageAware imageAware = new ImageViewAware(vh.imageView, false);
    String coverUrl = elementos.get(position).getUrlCover();
    if(coverUrl!=null && !coverUrl.equals(""))imageLoader.displayImage(coverUrl, imageAware);


    return v;
}

private class ViewHolder {
    ImageView imageView;
}

这就是我的ImageLoader对象的配置:

DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder()
            .cacheOnDisc(true)
            .cacheInMemory(true)
            .imageScaleType(ImageScaleType.IN_SAMPLE_INT)
            .bitmapConfig(Config.RGB_565)                .resetViewBeforeLoading(true)
            .build();

    ImageLoaderConfiguration configs = new ImageLoaderConfiguration.Builder(
            context.getApplicationContext())
            .memoryCache(new WeakMemoryCache())
            .discCacheSize(104857600)
            .defaultDisplayImageOptions(defaultOptions)
            .imageDownloader(new HttpClientImageDownloader(c, new DefaultHttpClient(manager, params))).threadPoolSize(10).build();

    imageLoader = ImageLoader.getInstance();
    imageLoader.init(configs);

有谁知道解决方案?最好的。

1 个答案:

答案 0 :(得分:0)

您可以通过调用

清除onLowMemory()中的缓存
    @Override
    public void onLowMemory() {
        ImageLoader.getInstance().clearMemoryCache();
        super.onLowMemory();
    }