我有一个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);
有谁知道解决方案?最好的。
答案 0 :(得分:0)
您可以通过调用
清除onLowMemory()中的缓存 @Override
public void onLowMemory() {
ImageLoader.getInstance().clearMemoryCache();
super.onLowMemory();
}