¿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
:
- Imagen de carga de Picasso en GifImageView (biblioteca android-gif-drawable)
- ¿No soporta Picasso para descargar imágenes que utilizan el protocolo https
- ¿Cómo uso la caché de disco en Picasso?
- Android Picasso - Marcador de posición y estilo de imagen de error
- Las imágenes no se cargan en android 5.0 usando la biblioteca 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?
- Clase de ImageView personalizada que no funciona con la biblioteca de descarga de imágenes de Picasso
- Cómo agregar cuadros a la imagen?
- Uso de Picasso con Image Getter
- Con RecyclerView, ¿Picasso sigue siendo necesario?
- Cómo cargar imágenes de una tarjeta SD con la biblioteca de Picasso
- Picasso carga imágenes con una imagen errónea en un adaptador de lista
- Obteniendo el ancho y altura de la imagen con la biblioteca picasso
- Imágenes grandes (desde archivo) no se cargan en Picasso, no se ha observado ningún error obvio
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?