Je souhaite partager mon expérience avec ces 3 bibliothèques: UIL, Picasso et Volley. J'utilisais auparavant UIL, mais je suis arrivé à la conclusion que je ne peux pas vraiment le recommander et je suggérerais plutôt d'utiliser Volley ou Picasso, tous deux développés par des équipes très talentueuses. UIL n'est pas mal du tout mais il manque l'attention aux détails des deux autres bibliothèques.
J'ai trouvé UIL moins agréable avec les performances de l'interface utilisateur; il a tendance à verrouiller le thread de l'interface utilisateur plus que Volley ou Picasso. Cela peut être en partie dû au fait que UIL ne prend pas en charge le traitement par lots des réponses d'image alors que Picasso et Volley le font par défaut.
De plus, je n'aimais pas le système de cache disque d'UIL. Bien que vous puissiez choisir entre différentes implémentations, je dois souligner que pour le moment, il n'y a aucun moyen de limiter le cache disque UIL à la fois par la taille totale et par le délai d'expiration de l'entité. Volley et Picasso font cela, et ils utilisent l'heure d'expiration renvoyée par le serveur par défaut alors que UIL l'ignore.
Enfin, UIL vous permet de définir une configuration globale du chargeur d'images qui inclut les implémentations et paramètres de cache disque et de cache mémoire sélectionnés et d'autres détails, mais cette configuration sera appliquée partout dans votre application. Donc, si vous avez besoin de plus de flexibilité comme deux caches de disque séparés, ce n'est pas le cas pour UIL. Volley, quant à lui, vous permet d'avoir autant de chargeurs d'images séparés que vous le souhaitez, chacun avec sa propre configuration. Picasso utilise une instance globale par défaut, mais vous permet également de créer des instances configurables séparément.
Pour résumer: Picasso a la meilleure API mais il utilise le cache disque HTTP global partagé entre toutes les HttpURLConnection
instances, ce qui peut être trop restrictif dans certains cas. Volley offre les meilleures performances et la meilleure modularité, mais il est moins convivial et vous obligera à écrire un ou deux modules de votre choix pour le faire fonctionner comme vous le souhaitez. Dans l'ensemble, je les recommanderais tous les deux contre l'UIL.
Edit (18 décembre 2014): Les choses ont changé depuis que j'ai écrit cette première réponse et j'ai senti qu'il était nécessaire de l'améliorer:
Picasso 2.4 est encore plus configurable que les versions plus anciennes, et lorsqu'il est utilisé avec OkHttp (ce qui est fortement recommandé), il est également capable d'utiliser un cache disque séparé pour chaque instance, donc il n'y a vraiment aucune restriction dans ce que vous pouvez faire. Plus important encore, j'ai remarqué que les performances de Picasso et d'OkHttp se sont beaucoup améliorées et à mon avis, c'est maintenant la solution de chargeur d'image la plus rapide pour Android, point final . Veuillez noter que dans mon code, j'utilise toujours .fit()
en combinaison avec .centerCrop()
ou .centerInside()
pour réduire l'utilisation de la mémoire et éviter les redimensionnements bitmap sur le thread de l'interface utilisateur. Picasso est activement développé et soutenu et c'est certainement un gros plus.
Volley n'a pas beaucoup changé mais j'ai remarqué deux problèmes avec lui entre-temps:
- Parfois sous forte charge, certaines images ne sont plus chargées en raison d'une corruption du cache disque.
- Les miniatures affichées dans un NetworkImageView (avec son type d'échelle défini sur centerCrop) sont assez floues par rapport à ce que vous obtenez avec les autres bibliothèques.
Pour ces raisons, j'ai décidé d'arrêter d'utiliser Volley.
UIL est encore lent (notamment le cache disque) et son API a tendance à changer assez souvent.
J'ai également testé cette nouvelle bibliothèque appelée Glide 3 qui prétend être plus optimisée que Picasso avec une API de type Picasso. D'après mon expérience personnelle, il est en fait plus lent que Picasso et Volley lors des requêtes réseau sous forte charge, même lorsqu'il est utilisé en combinaison avec OkHttp. Pire encore, cela a provoqué quelques plantages avec mes applications sous Lollipop en quittant une activité. Il a toujours 2 avantages par rapport à ses concurrents:
- Il prend en charge le décodage des GIF animés
- Il place les bitmaps finaux mis à l'échelle dans le cache disque, ce qui signifie que la lecture à partir du cache disque est extrêmement rapide.
Conclusion: je recommande maintenant d'utiliser Picasso + OkHttp car il offre la meilleure flexibilité, API, performances et stabilité combinées. Si vous avez besoin du support GIF, vous pouvez également envisager Glide.