android - libreria - Glide: ¿Cómo encontrar si la imagen ya está en caché y usar la versión en caché?
image library android (2)
No necesita un ModelLoader personalizado para mostrar el GIF de la memoria caché si está presente y obtenerlo de otra manera, ese es el comportamiento predeterminado de Glide. Solo usando una línea de carga estándar debería funcionar bien:
Glide.with(TheActivity.this) .load("http://sampleurl.com/sample.gif") .diskCacheStrategy(DiskCacheStrategy.SOURCE) .into(theImageView);
Su código evitará que Glide descargue el GIF y solo mostrará el GIF si ya está almacenado en caché, lo que parece que no desea.
Sí, la imagen antigua eventualmente será eliminada. De manera predeterminada, Glide usa un caché LRU, de modo que cuando el caché está lleno, se eliminará la imagen utilizada menos recientemente. Si lo desea, puede personalizar fácilmente el tamaño de la memoria caché para ayudar a esto. Consulte la página de Configuration wiki para saber cómo cambiar el tamaño de la memoria caché.
Lamentablemente, no hay forma de influir directamente en los contenidos de la memoria caché. No puede eliminar un elemento explícitamente, o forzar que se mantenga uno. En la práctica, con un tamaño de caché de disco adecuado, por lo general, no tiene que preocuparse por hacer tampoco. Si muestra su imagen con la frecuencia suficiente, no será desalojada. Si intenta almacenar en caché elementos adicionales y se queda sin espacio en la memoria caché, los elementos más antiguos se desalojarán automáticamente para crear espacio.
Escenario :
Tengo una imagen GIF grande que deseo almacenar en caché la primera vez que el usuario abre la aplicación utilizando Glide - Biblioteca de carga y almacenamiento de imágenes. Después de eso, cada vez que el usuario abre la aplicación, quiero mostrar la versión en caché si está presente. Esta URL GIF caducará después de un intervalo dado. Cuando caduca, recupero la nueva URL de GIF y muestro / caché para uso futuro.
Lo que intenté:
Revisé la invalidación de caché y caché en la página de github de Glide. También pasé por el subproceso del Grupo de Google Asegurando que las imágenes cargadas solo provengan de la memoria caché de disco , que muestra cómo obtener la imagen de la memoria caché. También revisé Cómo invalidar el caché de Glide para una pregunta específica sobre imágenes .
De los enlaces anteriores, veo el siguiente código de código que muestra cómo cargar la imagen desde el caché. Sin embargo, esto solo intenta obtener la imagen del caché. Si no está presente en el caché, no intenta obtener de la red y falla:
Glide.with(TheActivity.this)
.using(new StreamModelLoader<String>() {
@Override
public DataFetcher<InputStream> getResourceFetcher(final String model, int i, int i1) {
return new DataFetcher<InputStream>() {
@Override
public InputStream loadData(Priority priority) throws Exception {
throw new IOException();
}
@Override
public void cleanup() {
}
@Override
public String getId() {
return model;
}
@Override
public void cancel() {
}
};
}
})
.load("http://sampleurl.com/sample.gif")
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
.into(theImageView);
Preguntas:
¿Hay alguna forma más limpia de lograr lo siguiente ?: Mostrar la imagen GIF desde el caché, si está presente, descargue el GIF, guárdelo para su uso posterior y muéstrelo en
ImageView
.El artículo de almacenamiento en caché anterior menciona lo siguiente:
En la práctica, la mejor manera de invalidar un archivo de caché es cambiar su identificador cuando cambia el contenido (url, uri, ruta de archivo, etc.)
El servidor envía una URL diferente a la aplicación cuando caduca la anterior. En este caso, creo que la imagen antigua eventualmente será recogida de basura. ¿Hay alguna forma de forzar la eliminación de la imagen del caché?
En una nota similar, ¿hay alguna forma de evitar la recolección de basura de una imagen con una clave específica (para evitar que se vuelva a descargar el archivo grande) y luego se le pide que elimine la imagen antigua de la memoria caché cuando cambie la URL?
Glide.with(context)
.load("http://sampleurl.com/sample.gif")
.skipMemoryCache(true)
.into(imageView);
Ya notó que llamamos a .skipMemoryCache (true) para decirle específicamente a Glide que omita la memoria caché. Esto significa que Glide no pondrá la imagen en la memoria caché. Es importante entender que esto solo afecta la memoria caché. Glide seguirá utilizando el caché de disco para evitar otra solicitud de red para la próxima solicitud a la misma URL de imagen. Para más información, lea este Glide Cache y solicite la optimización .
Feliz codificacion !!