¿Cómo tratar con Picasso OutOfMemoryError?
Quiero mostrar un ViewPager
con ~ 50 páginas, cada una con una imagen diferente. Usando Picasso, las primeras 20-25 páginas funcionan perfectamente. Sin embargo, en ese momento me sale un OutOfMemoryError
, y no hay imágenes de carga en absoluto:
Throwing OutOfMemoryError "Failed to allocate a 7477932 byte allocation with 1932496 free bytes"
Estoy usando el siguiente código en mi PagerAdapter
:
- Custom Downloader con Picasso
- Cómo configurar un @BindingAdapter con Picasso?
- Picasso y contexto
- Imágenes grandes (desde archivo) no se cargan en Picasso, no se ha observado ningún error obvio
- ¿Es posible descargar imágenes de la memoria caché en picasso?
@Override public Object instantiateItem(final ViewGroup container, final int position) { View view = getView(); Picasso picasso = getImageLoader(mContext); picasso.load(getUrl(position)).fit().into((ImageView) view.findViewById(R.id.imageview)); container.addView(view); return view; } @Override public void destroyItem(final ViewGroup container, final int position, final Object object) { container.removeView((View) object); }
¿Qué puedo hacer para evitar esto?
- Picasso onBitmapLoaded nunca llamado
- Mostrar una imagen "Cargando ..." mientras carga el fondo de la imagen con Picasso
- Picasso no carga imagen de caché en listview
- Uso de la biblioteca picasso con una vista de imagen circular
- Memoria de Android y cliente de caché de caché http utilizando Picasso
- Picasso java.lang.IllegalStateException: La llamada al método no debería ocurrir desde el hilo principal
- Imageview Roundcorner no funciona para las cuatro esquinas
- Cómo descargar y almacenar en caché el mapa de bits utilizando la biblioteca de Picasso
He encontrado este problema .
Algunos puntos señalados:
- Utilice
skipMemoryCache()
- Utilice
builder.executor(Executors.newSingleThreadExecutor());
- Utilice una instancia de
Picasso
: no cree una nueva instancia utilizandoPicasso.Builder
cada vez.
Me las arreglé para arreglar mi problema con el último.
Esta pregunta es alta clasificado en Google hits, por lo que estoy añadiendo mi solución a este problema.
La adición de .fit()
resolvió el problema para mí. Estoy cargando con éxito imágenes con código inferior.
picasso.load(PartyUtil.getPartyIconResourceFromFullPartyName(parties.get(position))) .fit() .into(holder.icon);
Eliminar .fit()
hace que mi aplicación lance una OutOfMemoryException
.
- Android ilegal excepción cuando el cuadro de diálogo está mostrando
- ¿Cómo puedo añadir mi spinner a la ActionBar?