Picasso est une bibliothèque de chargement d’images dans les applications Android, développée par Square. La bibliothèque fournit une API simple et expressive pour charger, mettre en cache et afficher des graphiques depuis le réseau. Selon les statistiques GitHub de Picasso, la bibliothèque a été téléchargée plus de 100 000 fois. Picasso gère automatiquement la mémoire et met en cache les images à plusieurs niveaux.
Points clés
Picasso est une bibliothèque de chargement asynchrone d’images sous Android, créée par Square. Elle doit son nom à l’artiste Pablo Picasso, reflétant la philosophie de la bibliothèque : transformer une tâche complexe en une API simple et élégante. C’est la bibliothèque la plus populaire pour le chargement d’images dans la communauté Android.
L’architecture de Picasso est minimaliste : la bibliothèque utilise un pool de threads pour le chargement, LruCache pour le cache mémoire et DiskLruCache pour le cache disque. Contrairement à Glide, Picasso ne nécessite pas de configuration AppGlideModule et est prêt à l’emploi immédiatement après l’ajout de la dépendance. Cela en fait un choix idéal pour les prototypes et les petits projets.
Picasso 2.8 est la dernière version stable, compatible avec Android API 21+ et Java 8+. La bibliothèque ne nécessite pas de configuration de plugins Gradle ou d’annotations, ce qui simplifie la migration entre les versions et réduit la probabilité d’erreurs lors des mises à jour. Malgré sa longue histoire, Picasso reste demandé dans des milliers de projets dans le monde.
La tâche principale de Picasso est de charger une image par URL, de la décoder, de la redimensionner si nécessaire et de l’afficher dans un ImageView. La bibliothèque gère automatiquement les threads d’arrière-plan, le cache et la réutilisation des ImageView dans les listes.
Depuis sa sortie en 2013, Picasso est devenu la référence pour le chargement d’images dans la communauté Android. La bibliothèque est utilisée dans des milliers d’applications grâce à son seuil d’entrée minimal — une seule ligne de code suffit pour la première utilisation.
Les priorités dans Picasso permettent de gérer l’ordre de chargement des images. Par défaut, toutes les requêtes ont une priorité normale, mais pour les images critiques, une priorité élevée peut être définie via la méthode priority. Si un ImageView est réutilisé (par exemple, dans RecyclerView), Picasso annule automatiquement la requête précédente et en lance une nouvelle, évitant le scintillement des images lors du défilement.
Picasso propose un ensemble de fonctionnalités qui couvrent les principaux scénarios de travail avec les images dans les applications mobiles sans complexité inutile.
Le cache de Picasso se compose de deux niveaux : la RAM pour un accès rapide et le disque pour un stockage permanent. Lors de la demande d’une image, la bibliothèque vérifie d’abord le cache mémoire, puis le disque, et seulement ensuite effectue une requête réseau. Cela accélère considérablement l’affichage des images chargées de manière répétée.
Les transformations permettent de redimensionner, recadrer ou faire pivoter une image sans décoder l’original à chaque fois. Picasso fournit des transformations intégrées CenterCrop et CenterInside, et permet également de créer des transformations personnalisées via l’interface Transformation. Les images transformées sont mises en cache séparément.
Le placeholder est affiché pendant le chargement de l’image depuis le réseau, donnant un retour visuel à l’utilisateur. Une image d’erreur est montrée en cas d’échec du chargement. Picasso prend également en charge une image qui s’affiche jusqu’à ce qu’une nouvelle version soit chargée, ce qui est utile pour les avatars mis à jour.
Picasso prend en charge le chargement d’images à partir d’URL, de ressources, de fichiers, de fournisseurs de contenu et d’URI. La méthode load() est surchargée pour tous ces types, et la bibliothèque détermine automatiquement la source. Pour les ressources et les fichiers, Picasso n’effectue pas de requête réseau mais charge les données directement, ce qui accélère l’affichage des graphiques intégrés.
Picasso utilise une architecture basée sur RequestCreator et Dispatcher. Chaque requête est créée via Picasso.get().load() et exécutée dans un pool de threads. Le Dispatcher gère la file d’attente des requêtes, les priorités et l’annulation lors de la réutilisation d’un ImageView.
Lors de l’appel à into(view), Picasso crée un objet Action contenant l’URL, les transformations, la cible et le callback. L’Action est placée dans la file d’attente du Dispatcher. Le moteur charge l’image via Downloader (OkHttp par défaut), décode le Bitmap, applique les transformations et livre le résultat au thread UI. Toutes les images sont automatiquement ajustées à la taille de l’ImageView.
Picasso.get()
.load("https://example.com/image.jpg")
.placeholder(R.drawable.placeholder)
.error(R.drawable.error)
.resize(400, 300)
.centerCrop()
.into(imageView)
L’installation de Picasso se fait via Gradle. La bibliothèque est distribuée via Maven Central et ne nécessite pas de configuration complexe. La version minimale de l’API Android est 21.
Dans le fichier build.gradle du module, ajoutez implementation « com.squareup.picasso:picasso:2.8 ». Après la synchronisation Gradle, Picasso est prêt à l’emploi. Pour les opérations réseau, Picasso utilise automatiquement OkHttp s’il est présent dans le projet, ou la HttpURLConnection intégrée.
dependencies {
implementation "com.squareup.picasso:picasso:2.8"
}
// Kafka pour le chargement depuis OkHttp (optionnel)
implementation "com.squareup.okhttp3:okhttp:4.12.0"
L’indicateur de débogage de Picasso montre un triangle coloré dans le coin de chaque image : rouge pour le chargement réseau, bleu pour le cache disque, vert pour le cache mémoire. Il s’active en appelant setIndicatorsEnabled(true) sur l’instance Picasso. La taille de cache par défaut est de 15 % de la mémoire disponible de l’appareil.
Pour configurer une instance personnalisée de Picasso, utilisez Picasso.Builder. Il permet de définir un Executor pour les threads d’arrière-plan, un Downloader pour les requêtes réseau, MemoryCache et DiskCache. Une instance personnalisée est particulièrement utile dans les tests, où le Downloader peut être remplacé par un stub qui retourne une image sans requête réseau.
Les exemples ci-dessous illustrent des scénarios typiques de travail avec Picasso : chargement d’une image simple, utilisation de transformations et chargement dans RecyclerView.
Le chargement de base dans un ImageView se fait en un seul appel. Picasso ajuste automatiquement l’image aux dimensions de la vue en tenant compte de scaleType. Un placeholder est affiché jusqu’à la fin du chargement, et une image d’erreur est montrée en cas d’erreur de connexion.
Picasso.get()
.load("https://example.com/photo.jpg")
.placeholder(R.drawable.loading)
.error(R.drawable.broken_image)
.fit()
.centerCrop()
.into(imageView)
BlurTransformation floute l’image avec un rayon donné. Les transformations personnalisées implémentent l’interface Transformation avec la méthode transform. Le cache stocke le résultat de la transformation sous une clé unique pour éviter de la réappliquer.
public class BlurTransformation implements Transformation {
@Override
public Bitmap transform(Bitmap source) {
Bitmap blurred = Bitmap.createBitmap(source);
RenderScript rs = RenderScript.create(context);
// application du flou
source.recycle();
return blurred;
}
@Override
public String key() {
return "blur";
}
}
Dans RecyclerView, Picasso annule automatiquement les requêtes pour les ImageViews qui ont défilé hors de l’écran et réutilise les images déjà chargées. Cela évite les fuites de mémoire et assure un défilement fluide.
public void onBindViewHolder(ViewHolder holder, int position) {
String url = items.get(position).getImageUrl();
Picasso.get()
.load(url)
.fit()
.centerCrop()
.into(holder.imageView);
}
La comparaison de Picasso et Glide est une question fréquente lors du choix d’une bibliothèque de chargement d’images pour Android. Les deux bibliothèques résolvent la même tâche mais ont des priorités et des caractéristiques d’utilisation différentes.
Picasso est mieux adapté aux projets où la simplicité et la taille minimale de l’APK sont importantes. Glide est choisi lorsque le support des GIF, des images animées et l’optimisation maximale de la mémoire sont nécessaires. Glide redimensionne automatiquement l’image à la taille exacte de l’ImageView, ce qui réduit la consommation mémoire jusqu’à 50 % par rapport à Picasso dans certains scénarios.
Dans les tests de performance, Glide montre de meilleurs résultats avec RecyclerView grâce à son mécanisme de préchargement et d’annulation automatique des requêtes lors du défilement rapide. Picasso utilise une stratégie plus simple, ce qui le rend prévisible mais moins efficace sur de grands volumes de données.
Picasso se concentre sur la simplicité de l’API et la taille minimale. Glide offre des fonctionnalités plus étendues : support des GIFs, images animées et intégration avec le cycle de vie. Glide gère également la mémoire plus efficacement grâce à la mise à l’échelle automatique à la taille de l’ImageView.
| Critère | Picasso | Glide |
|---|---|---|
| Taille de la bibliothèque | ~120 Ko | ~500 Ko |
| Support GIF | Non | Oui |
| Images animées | Non | Oui |
| Développeur | Square | Google (Bumptech) |
| API | Chaîne fluide | RequestBuilder |
Selon Android Developer Relations, Google recommande Glide comme bibliothèque préférée pour le chargement d’images dans les nouveaux projets. Picasso reste un excellent choix pour les projets simples où les GIFs et les images animées ne sont pas nécessaires.
Questions fréquentes
Picasso est plus petit et plus simple à utiliser. Glide prend en charge les GIFs et les images animées, gère la mémoire plus efficacement et est recommandé par Google. Le choix dépend des besoins du projet en formats supplémentaires.
Pour vider le cache de Picasso, utilisez la méthode Picasso.get().invalidate(url) pour une seule image ou shutdown() pour un vidage complet. Le cache disque est supprimé lors de la réinstallation de l’application ou via les paramètres système.
Picasso ne dépend pas de la rotation de l’écran. Les images chargées sont stockées dans le cache et affichées à partir de celui-ci lors de la recréation de l’Activity. Pour accélérer, utilisez ViewModel avec Picasso pour conserver les données chargées.
Oui, Picasso est entièrement compatible avec Kotlin. Les développeurs Kotlin peuvent utiliser des fonctions d’extension pour une syntaxe plus concise ou appliquer la bibliothèque koptional pour gérer les valeurs nulles lors du chargement d’images.
Picasso utilise LruCache pour le cache mémoire, nettoyant automatiquement les images inutilisées. La taille de cache par défaut est de 15 % de la mémoire disponible de l’application. En cas de faible mémoire, Picasso libère les ressources via onTrimMemory.
Résumé
Nous développerons une application mobile clé en main
IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.
Lisez aussi