Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


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

  • Picasso: cargar imágenes en widget listview
  • Picasso no carga la imagen
  • Obtener Bitmap de ImageView cargado con Picasso
  • Carga imágenes grandes con Picasso y objeto Transform personalizado
  • Recyclerview dolorosamente lento para cargar imágenes en caché de Picasso
  • Appcompat CardView y Picasso sin esquinas redondeadas
  • ¿Cómo implementar correctamente el feed (similar a Facebook / Instagram) en Android?
  • Picasso: fuera de la memoria
  • 8 Solutions collect form web for “Borrar memoria caché de 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()); }

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.