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 ..?

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); 

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()); }

  • Picasso - obtener el camino de la imagen cargada
  • Gestión de la memoria de Android: Densidad de pantalla, tamaños de imagen solicitados y montón disponible
  • Custom Downloader con Picasso
  • Android Studio Picasso gif loading image para marcador de posición
  • Picasso no carga la imagen
  • Cómo Picasso realmente Cache las imágenes
  • Android borrar algunas fotos de caché Picasso
  • Actualizar / cambiar el mapa de bits en caché utilizando Picasso y OkHttp
  • Preload de imágenes en la memoria / disco con Android Picasso
  • RecyclerView con GridLayoutManager y Picasso mostrando imagen incorrecta
  • Adición de bordes para imagen redondeada android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.