Me gustaría compartir mi experiencia con estas 3 bibliotecas: UIL, Picasso y Volley. Anteriormente usé UIL, pero luego llegué a la conclusión de que realmente no puedo recomendarlo y sugeriría usar Volley o Picasso en su lugar, ambos desarrollados por equipos de gran talento. UIL no está nada mal, pero carece de la atención al detalle de las otras dos bibliotecas.
Encontré que UIL es menos agradable con el rendimiento de la interfaz de usuario; tiende a bloquear el hilo de la interfaz de usuario 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 forma predeterminada.
Además, no me gustó el sistema de caché en disco de UIL. Si bien puede elegir entre varias implementaciones, debo señalar que por el momento no hay forma de limitar la memoria caché del disco UIL tanto por tamaño total como por tiempo de vencimiento de la entidad. Volley y Picasso hacen eso, y usan el tiempo de vencimiento devuelto por el servidor de forma predeterminada, mientras que UIL lo ignora.
Finalmente, UIL le permite establecer una configuración de cargador de imágenes global que incluye la 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. Por lo tanto, si necesita más flexibilidad, como dos cachés de disco separados, no hay opción para UIL. Volley, por otro lado, le permite tener tantos cargadores de imágenes independientes como desee, cada uno con su propia configuración. Picasso utiliza una instancia global de forma predeterminada, pero también le permite crear instancias configurables por separado.
En resumen: Picasso tiene la mejor API, pero utiliza la caché de disco HTTP global compartida entre todas las HttpURLConnection
instancias, lo que puede ser demasiado restrictivo en algunos casos. Volley tiene el mejor rendimiento y modularidad, pero es menos fácil de usar y requerirá que escriba uno o dos módulos propios para que funcione como desea. En general, los recomendaría 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 una caché de disco separada para cada instancia, por lo que realmente no hay restricciones en lo que puede hacer. Más importante aún, noté 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, punto. Tenga en cuenta que en mi código siempre lo uso .fit()
en combinación con .centerCrop()
o .centerInside()
para reducir el uso de memoria y evitar cambios de tamaño de mapa de bits en el hilo de la interfaz de usuario. Picasso se desarrolla y apoya activamente y eso es ciertamente una gran ventaja.
Volley no ha cambiado mucho, pero noté dos problemas mientras tanto:
- 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 NetworkImageView (con su tipo de escala establecido en centerCrop) son bastante borrosas en comparación con lo que obtiene con las otras bibliotecas.
Por estas razones decidí dejar de usar Volley.
UIL sigue siendo lento (especialmente la caché de disco) y su API tiende a cambiar con bastante frecuencia.
También probé esta nueva biblioteca llamada Glide 3 que afirma estar más optimizada que Picasso con una API similar a Picasso. Según 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 salir de una actividad. Todavía tiene 2 ventajas sobre sus competidores:
- Admite decodificación de GIF animados
- Coloca los mapas de bits finales reducidos en la memoria caché del disco, lo que significa que la lectura desde la memoria caché del disco es extremadamente rápida.
Conclusión: ahora recomiendo usar Picasso + OkHttp porque proporciona la mejor flexibilidad, API, rendimiento y estabilidad combinados. Si necesita soporte GIF, también puede considerar Glide.