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

  • No existe el directorio de caché
  • Imágenes de caché locales, desde el almacenamiento de firebogs de Google
  • Android - dibujo de caché - ¿Cuándo es útil?
  • Método de reflexión de Android M freeStorageAndNotify excepción
  • ¿Hay alguna razón para precargar recursos extraíbles de los recursos?
  • Almacenamiento en caché de imágenes de Android
  • 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); 

  • Pin Notificación a la parte superior del área de notificación
  • Establecer la imagen del url a la vista de la imagen
  • Instalación de APK programáticamente en Marshmallow
  • Haciendo un ProgressBar / Seekbar flaco de encargo
  • Botón redondeado en Android
  • ¿Hay algún tutorial de animación Android útil para principiantes?
  • 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.