glide example developer adding android universal-image-loader picasso

example - Solución local de almacenamiento en caché de imágenes para Android: Square Picasso vs Universal Image Loader



universal image loader android example (5)

Estoy buscando una biblioteca asíncrona de carga de imágenes y almacenamiento en caché en Android. Iba a usar Picasso, pero descubrí que Universal Image Loader es más popular en GitHub. ¿Alguien sabe sobre estas dos bibliotecas? Un resumen de pros y contras sería genial.

(Todas mis imágenes están en el disco localmente, así que no necesito redes, por lo tanto, no creo que Volley esté en forma)


Creo que ImageLoader es más personalizable y flexible en comparación con la biblioteca de Picasso.


Implementé una aplicación que debería obtener y mostrar imágenes de Internet constantemente. Estaba a punto de programar un mecanismo de caché de imágenes, antes de que un amigo me recomendara el cargador universal de imágenes.

El UIL es muy bueno personalizable. Es tan personalizable que un novato puede hacer algo mal fácilmente. Sin embargo, el UIL fue lento en mi aplicación y se volvió un poco más lento. Mi caso de uso era un ListView con imágenes.

Ayer estaba buscando una alternativa al UIL, y descubrí a Picasso. Picasso fue fácil de integrar y usar: solo Picasso.context(context).load(url).into(imageview) y la imagen podría ser más rápida y estar perfectamente integrada.

Para mí, Picasso definitivamente es la API para usar. Mi experiencia con UIL no fue buena.


La comparación de Koushik Dutta es principalmente para la referencia de velocidad. Su publicación solo tocó cosas muy básicas, y no es específica para imágenes locales. Me gustaría compartir mis experiencias con Picasso y UIL después de hacer la pregunta. Tanto Picasso como UIL pueden cargar imágenes locales. Primero probé con Picasso y me sentí feliz, pero luego decidí cambiar a UIL para obtener más opciones de personalización.

Picasso:

  • La fluida interfaz de Picasso es agradable. Pero saltando con "con", "dentro", "carga", en realidad no sabes qué hay detrás de la escena. Es confuso lo que ha regresado.

  • Picasso le permite especificar el tamaño objetivo exacto. Es útil cuando tiene problemas de presión o rendimiento de la memoria, puede cambiar la calidad de la imagen por la velocidad.

  • Las imágenes se almacenan en caché con el tamaño en su clave, es útil cuando visualiza imágenes con diferentes tamaños.

  • Puede personalizar el tamaño de la memoria caché. Pero su caché de disco solo es para solicitudes http. Para las imágenes locales, si le importa la velocidad de carga, es bueno tener una memoria caché de disco en miniatura para que no tenga que leer varios MB para una imagen cada vez. Picasso no tiene este mecanismo para redimensionar y guardar miniaturas en el disco.

  • Picasso no expone el acceso a su instancia de caché. (Puedes tenerlo cuando configures Picasso por primera vez y lo guardes ...).

  • Algunas veces quiere leer imágenes de manera asíncrona en un mapa de bits devuelto por un oyente. Sorprendentemente, Picasso no tiene eso. La dosis "fetch ()" no pasa nada. "get ()" es para lectura sincronizada, y "load ()" es para dibujar asincrónicamente una vista.

  • Picasso solo tiene algunos ejemplos simples en la página de inicio, y tendrá que leer el javadoc desordenado para usos avanzados.

UIL:

  • UIL utiliza constructores para la personalización. Casi todo se puede configurar.

  • UIL no le permite especificar el tamaño que desea cargar en una vista. Utiliza algunas reglas basadas en el tamaño de la vista. No es tan flexible como Picasso. No tengo forma de cargar una imagen de menor resolución para reducir la huella de memoria. (Editar: este comportamiento se puede modificar fácilmente agregando un argumento ImageSize en el código fuente y omitiendo la verificación del tamaño de la vista)

  • UIL proporciona caché de disco personalizable, puede usar esto para almacenar en caché las miniaturas con el tamaño especificado. Pero no es perfecto. Aquí están los details . (Editar: si te preocupa la velocidad y quieres múltiples niveles de almacenamiento en caché de miniaturas, como mi caso, puedes modificar el código fuente, dejar que el caché de disco use "memoryKey" y hacerlo también sensible al tamaño)

  • UIL almacena en caché de forma predeterminada imágenes de diferentes tamaños en la memoria, y se puede desactivar en la configuración.

  • UIL expone la memoria de respaldo y la memoria caché de disco a la que puede acceder.

  • UIL proporciona formas flexibles de obtener un mapa de bits o cargar una vista.

  • UIL es mejor en la documentación. UIL proporciona los usos detallados en la página de Github, y hay un tutorial vinculado.

Sugiero comenzar con Picasso, si necesita más control y personalización, vaya a UIL.


Me gustaría compartir mi experiencia con estas 3 bibliotecas: UIL, Picasso y Volley. Antes usaba UIL pero luego llegué a la conclusión de que realmente no puedo recomendarlo y sugeriría usar Volley o Picasso, ambos desarrollados por equipos de gran talento. UIL no está nada mal, pero le falta la atención a los detalles de las otras dos bibliotecas.

Descubrí que UIL es menos agradable con el rendimiento de UI; tiende a bloquear el hilo de UI más que Volley o Picasso. Esto puede deberse en parte al hecho de que UIL no admite el procesamiento por lotes de las respuestas de imagen, mientras que Picasso y Volley lo hacen de manera predeterminada.

Además, no me gustó el sistema de caché de disco de UIL. Si bien puede elegir entre varias implementaciones, debo señalar que en este momento no hay forma de limitar el caché de disco de UIL, tanto por tamaño total como por tiempo de caducidad de la entidad. Volley y Picasso hacen eso, y usan el tiempo de caducidad devuelto por el servidor por defecto, mientras que UIL lo ignora.

Finalmente, UIL le permite configurar una configuración de cargador de imágenes global que incluye la memoria caché de disco seleccionada y las implementaciones y configuraciones de caché de memoria y otros detalles, pero esta configuración se aplicará en todas partes de su aplicación. Entonces, si necesita más flexibilidad, como dos cachés de disco separados, es un no ir para UIL. Volley por otro lado le permite tener tantos cargadores de imágenes por separado como desee, cada uno con su propia configuración. Picasso usa una instancia global de forma predeterminada, pero también le permite crear instancias configurables por separado.

Para resumir: Picasso tiene la mejor API, pero utiliza la memoria caché global de disco HTTP compartida entre todas HttpURLConnection instancias de HttpURLConnection , que en algunos casos puede ser demasiado restrictiva. Volley tiene el mejor rendimiento y modularidad, pero es menos fácil de usar y requerirá que usted escriba uno o dos módulos para que funcione como lo desee. En general, recomendaría ambos contra UIL.

Editar (18 de diciembre de 2014): Las cosas han cambiado desde que escribí esta respuesta inicial y sentí que era necesario mejorarla:

Picasso 2.4 es incluso más configurable que las versiones anteriores, y cuando se usa con OkHttp (que es muy recomendable), también puede usar un caché de disco por separado para cada instancia, por lo que no hay restricciones en lo que puede hacer. Más importante aún, me di cuenta de que el rendimiento de Picasso y OkHttp ha mejorado mucho y, en mi opinión, ahora es la solución de carga de imágenes más rápida para Android, y punto. Tenga en cuenta que en mi código siempre utilizo .fit() en combinación con .centerCrop() o .centerInside() para reducir el uso de memoria y evitar el cambio de tamaño de mapa de bits en el subproceso de la interfaz de usuario. Picasso está activamente desarrollado y respaldado, y eso es sin duda una gran ventaja.

Volley no ha cambiado mucho pero entretanto noté dos problemas:

  • A veces, con mucha carga, algunas imágenes ya no se cargan debido a daños en la memoria caché del disco.
  • Las miniaturas que se muestran en un NetworkImageView (con su tipo de escala establecido en centerCrop) son bastante borrosas en comparación con las otras bibliotecas.

Por estas razones, decidí dejar de usar Volley.

UIL sigue siendo lento (especialmente la memoria caché de disco) y su API tiene una tendencia a cambiar con bastante frecuencia.

También probé esta nueva biblioteca llamada Glide 3, que dice ser más optimizada que Picasso con una API similar a Picasso. De acuerdo con mi experiencia personal, en realidad es más lento que Picasso y Volley durante las solicitudes de red con mucha carga, incluso cuando se usa en combinación con OkHttp. Peor aún, causó algunos bloqueos con mis aplicaciones en Lollipop al abandonar una actividad. Todavía tiene 2 ventajas sobre sus competidores:

  • Es compatible con la decodificación de GIF animados
  • Pone los últimos mapas de bits reducidos en escala en la memoria caché de disco, lo que significa que leer desde la memoria caché de disco es extremadamente rápido.

Conclusión: ahora recomiendo usar Picasso + OkHttp porque ofrece la mejor flexibilidad, API, rendimiento y estabilidad combinados. Si necesita soporte GIF, también puede considerar Glide.


Si lees this publicación en G + de Koush obtendrás soluciones claras para tus confusiones, he puesto el resumen de eso, ¡en que Android-Universal-Image-Loader es el ganador para tus requerimientos!

  • Picasso tiene la API de imagen más bonita si estás usando la red!

  • UrlImageViewHelper + AndroidAsync es el más rápido. Jugar con estas otras dos geniales bibliotecas realmente ha resaltado que la API de la imagen está bastante anticuada, sin embargo.

  • Volley es resbaladizo; Realmente disfruto de sus transportes de back-end conectables,
    y puede terminar cayendo AndroidAsync allí. La prioridad de la solicitud
    y la gestión de cancelación es excelente (si usa la red)

  • Android-Universal-Image-Loader es el más popular por ahí
    actualmente. Altamente personalizable.

Este proyecto tiene como objetivo proporcionar un instrumento reutilizable para carga de imágenes asincrónicas, almacenamiento en caché y visualización. Originalmente se basa en el proyecto de Fedor Vlasov y ha sido refactorizado y mejorado enormemente desde entonces.

Próximos cambios en la nueva versión de UIL (1.9.2):

Posibilidad de llamar a ImageLoader fuera de UI threadNew Disk Cache API (más flexible). Nuevo LruDiscCache basado en DiskLruCache de Jake Wharton.

Teniendo en cuenta todas estas suites de Android-Universal-Image-Loader, su requisito (¡ cargar las imágenes está en el disco localmente )!