Borrar memoria caché de Picasso
Estoy tratando de borrar la memoria caché de Picasso a través de la codificación de Android.
¿Puede alguien por favor me ayude en este tema ..?
- Picasso + convertView: ¿qué estoy haciendo mal aquí?
- ¿Cómo implementar Pinch Zoom en la biblioteca de Picasso?
- ¿Cómo implementar correctamente el feed (similar a Facebook / Instagram) en Android?
- Imagen parpadeando mientras se desplaza en RecyclerView
- Recyclerview dolorosamente lento para cargar imágenes en caché de Picasso
He intentado usar el código siguiente, pero esto no era útil en mi caso:
Picasso.with(getActivity()).load(data.get(pos).getFeed_thumb_image()).skipMemoryCache().into(image);
- Uso de Picasso para cargar una imagen en un mapa de bits
- ¿Cómo escuchar los eventos completos de carga de Picasso (Android)?
- ¿Cómo lograr el seguimiento de la imagen de marcador de posición en ImageView Android como Pinterest?
- ImageView con mapas de bits descargados desde URL (modo de repetición de mosaico)
- Android Square Picasso no carga persa imagen de carácter url
- Android: crear imagen circular con picasso
- Obteniendo el ancho y altura de la imagen con la biblioteca picasso
- Cargar mapa de bits con Picasso
Use esto en su lugar:
Picasso.with(getContext()).load(data.get(pos).getFeed_thumb_image()).memoryPolicy(MemoryPolicy.NO_CACHE).into(image);
Cuando la actividad destruye, por desgracia bitmap no se recicló si estamos usando Picasso. Trato de reciclar programaticamente mapa de bits, lo que se carga en la vista de imagen. Hay una manera de hacer referencia al mapa de bits cargado mediante el uso de Target
.
Target mBackgroundTarget = new Target() { Bitmap mBitmap; @Override public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { if (bitmap == null || bitmap.isRecycled()) return; mBitmap = bitmap; mBgImage.setImageBitmap(bitmap); mHandler.post(new Runnable() { @Override public void run() { // Do some animation } }); } @Override public void onBitmapFailed(Drawable errorDrawable) { recycle(); } @Override public void onPrepareLoad(Drawable placeHolderDrawable) { } /** * Recycle bitmap to free memory */ private void recycle() { if (mBitmap != null && !mBitmap.isRecycled()) { mBitmap.recycle(); mBitmap = null; System.gc(); } } };
Y cuando la actividad destruye, llamo onBitmapFailed(null)
para reciclar el mapa de bits cargado.
@Override protected void onDestroy() { super.onDestroy(); try { if (mBackgroundTarget != null) { mBackgroundTarget.onBitmapFailed(null); Picasso.with(context).cancelRequest(mBackgroundTarget); } } catch (Exception e) { e.printStackTrace(); } }
Pero recuerde, NO CACHE IMAGEN EN MEMORIA por este caso, causará la excepción Use bitmap reciclado.
Picasso.with(context) .load(imageUrl) .resize(width, height) .memoryPolicy(MemoryPolicy.NO_CACHE) .into(mBackgroundTarget);
Espero que esto ayude.
Elimina la caché de Picasso así.
public class Clear { public static void clearCache (Picasso p) { p.cache.clear(); } }
Esta clase util puede borrar el caché para usted. Sólo tienes que llamarlo:
Clear.clearCache(Picasso.with(context));
EDIT :
La clase Clear debe estar en el paquete:
package com.squareup.picasso;
Porque el caché no es accesible desde fuera de ese paquete. Como en esta respuesta: https://stackoverflow.com/a/23544650/4585226
Si está intentando cargar una imagen a través de Json (desde db) intente borrar el networkCache para obtener un mejor resultado.
Picasso.with(context).load(uri).networkPolicy(NetworkPolicy.NO_CACHE) .memoryPolicy(MemoryPolicy.NO_CACHE) .placeholder(R.drawable.bv_logo_default).stableKey(id) .into(viewImage_imageView);
Si mantiene la referencia de su implementación personalizada de Downloader
puede borrar la caché.
public class PicassoUtil { private static Picasso sInstance; private static OkHttp22Downloader sDownloader; public static Picasso getPicasso(Context context){ if(sInstance == null) { sDownloader = new OkHttp22Downloader(context) Picasso.Builder builder = new Picasso.Builder(context); builder.downloader(sDownloader); sInstance = builder.build(sDownloader); } return sInstance; } public static void clearCache(){ if(sDownloader != null){ sDownloader.clearCache(); } } }
Es importante tener acceso a su cliente http y su Cache
. En mi implementación hay acceso a la memoria caché, por lo tanto, la limpieza de caché con el método clearCache()
.
Yo tuve el mismo problema. Funcionó para mí. Utilicé Picasso en RecycleView dentro de un diálogo . Cuando cerré el cuadro de diálogo, picasso no despeja caché. Pero mientras está utilizando el diálogo se borra el caché de imágenes . Sin embargo, hay algún caché que no se borra. Tal vez el caché que no se ha borrado es el último visto en el diálogo antes de dialog.dismiss ().
Utilice esta memoryPolicy (MemoryPolicy.NO_CACHE, MemoryPolicy.NO_STORE)
Picasso.with(activity).load(file).resize(100,100).centerCrop().memoryPolicy(MemoryPolicy.NO_CACHE,MemoryPolicy.NO_STORE).into(contactImage, new com.squareup.picasso.Callback() { @Override public void onSuccess() { } @Override public void onError() { } });
Picasso.with(this.getContext()).load(gamePlayer.getPlayerProfileUrl()).skipMemoryCache().into(iv);
Esto también funciona
En lugar de borrar la caché completa si se desea actualizar la imagen con el Uri dado. Picasso.with(context).invalidate(uri);
este Picasso.with(context).invalidate(uri);
Que internamente elimina la clave de la caché mantenido por Picasso.
Extracto de Picasso.java
/** * Invalidate all memory cached images for the specified {@code uri}. * * @see #invalidate(String) * @see #invalidate(File) */ public void invalidate(Uri uri) { if (uri == null) { throw new IllegalArgumentException("uri == null"); } cache.clearKeyUri(uri.toString()); }
/** * Invalidate all memory cached images for the specified {@code uri}. * * @see #invalidate(String) * @see #invalidate(File) */ public void invalidate(Uri uri) { if (uri == null) { throw new IllegalArgumentException("uri == null"); } cache.clearKeyUri(uri.toString()); }
- ¿Cómo puedo utilizar sharedPreferences fuera de una actividad?
- Icono de notificación al descargar el archivo