Picasso is een bibliotheek voor het laden van afbeeldingen in Android-applicaties, ontwikkeld door Square. De bibliotheek biedt een eenvoudige en expressieve API voor het laden, cachen en weergeven van graphics uit het netwerk. Volgens GitHub-statistieken van Picasso is de bibliotheek meer dan 100.000 keer gedownload. Picasso beheert automatisch het geheugen en cacht afbeeldingen op meerdere niveaus.
Belangrijkste punten
Picasso is een bibliotheek voor asynchroon laden van afbeeldingen in Android, gemaakt door Square. De naam is afgeleid van de kunstenaar Pablo Picasso en weerspiegelt de filosofie van de bibliotheek: een complexe taak omzetten in een eenvoudige en elegante API. Het is de populairste bibliotheek voor het laden van afbeeldingen in de Android-gemeenschap.
De architectuur van Picasso is minimalistisch: de bibliotheek gebruikt een threadpool voor laden, LruCache voor cache in geheugen en DiskLruCache voor schijfcache. In tegenstelling tot Glide vereist Picasso geen configuratie van AppGlideModule en is het direct na het toevoegen van de afhankelijkheid klaar voor gebruik. Dit maakt het de ideale keuze voor prototypes en kleine projecten.
Picasso 2.8 — de laatste stabiele versie, compatibel met Android API 21+ en Java 8+. De bibliotheek vereist geen configuratie van Gradle-plugins of annotaties, wat migratie tussen versies vereenvoudigt en het risico op fouten bij updates vermindert. Ondanks zijn lange geschiedenis blijft Picasso gevraagd in duizenden projecten wereldwijd.
De hoofdtaak van Picasso is het laden van een afbeelding van URL, decoderen, indien nodig van formaat veranderen en weergeven in ImageView. De bibliotheek beheert automatisch achtergrondthreads, cache en hergebruik van ImageView in lijsten.
Sinds de release in 2013 is Picasso de standaard geworden voor het laden van afbeeldingen in de Android-gemeenschap. De bibliotheek wordt gebruikt in duizenden applicaties dankzij de minimale instapdrempel — voor het eerste gebruik is één regel code voldoende.
Prioriteiten in Picasso maken het mogelijk de laadvolgorde van afbeeldingen te beheren. Standaard hebben alle verzoeken normale prioriteit, maar voor kritieke afbeeldingen kan hoge prioriteit worden ingesteld via de methode priority. Als ImageView opnieuw wordt gebruikt (bijv. in RecyclerView), annuleert Picasso automatisch het vorige verzoek en start een nieuw, waardoor flikkeren van afbeeldingen bij scrollen wordt voorkomen.
Picasso biedt een reeks functies die de basisscenario's voor het werken met afbeeldingen in mobiele apps dekken zonder onnodige complexiteit.
Cache van Picasso bestaat uit twee niveaus: werkgeheugen voor snelle toegang en schijf voor permanente opslag. Bij een afbeeldingsverzoek controleert de bibliotheek eerst de cache in het geheugen, dan de schijf en pas daarna wordt een netwerkverzoek uitgevoerd. Dit versnelt de weergave van herhaaldelijk geladen afbeeldingen aanzienlijk.
Transformaties maken het mogelijk afbeeldingen te herschalen, bij te snijden of te roteren zonder het origineel elke keer te decoderen. Picasso biedt ingebouwde transformaties CenterCrop en CenterInside en maakt het mogelijk aangepaste transformaties te maken via de Transformation-interface. Getransformeerde afbeeldingen worden apart gecacht.
Placeholder wordt weergegeven tijdens het laden van de afbeelding uit het netwerk en geeft de gebruiker visuele feedback. De foutafbeelding wordt getoond bij een laadfout. Picasso ondersteunt ook een afbeelding die wordt getoond totdat een nieuwe versie is geladen, wat handig is voor updatbare avatars.
Picasso ondersteunt het laden van afbeeldingen van URL, bronnen, bestanden, contentproviders en URI. De methode load() is overbelast voor al deze typen en de bibliotheek bepaalt automatisch de bron. Voor bronnen en bestanden voert Picasso geen netwerkverzoek uit, maar laadt gegevens direct, wat de weergave van ingebouwde grafische elementen versnelt.
Picasso maakt gebruik van een architectuur op basis van RequestCreator en Dispatcher. Elk verzoek wordt gemaakt via Picasso.get().load() en uitgevoerd in een threadpool. De Dispatcher beheert de verzoekwachtrij, prioriteiten en het annuleren van verzoeken bij hergebruik van ImageView.
Bij aanroep van into(view) maakt Picasso een Action-object aan met URL, transformaties, target en callback. De Action wordt in de wachtrij van de Dispatcher geplaatst. De engine laadt de afbeelding via Downloader (standaard OkHttp), decodeert Bitmap, past transformaties toe en geeft het resultaat terug in de UI-thread. Alle afbeeldingen worden automatisch aangepast aan de grootte van ImageView.
Picasso.get()
.load("https://example.com/image.jpg")
.placeholder(R.drawable.placeholder)
.error(R.drawable.error)
.resize(400, 300)
.centerCrop()
.into(imageView)
Installatie van Picasso gebeurt via Gradle. De bibliotheek wordt verspreid via Maven Central en vereist geen complexe configuratie. Minimale Android API-versie is 21.
Voeg in het build.gradle-bestand op moduleniveau implementation 'com.squareup.picasso:picasso:2.8' toe. Na synchronisatie van Gradle is Picasso klaar voor gebruik. Voor netwerkverkeer gebruikt Picasso automatisch OkHttp als het in het project aanwezig is, of de ingebouwde HttpURLConnection.
dependencies {
implementation "com.squareup.picasso:picasso:2.8"
}
// Kafka voor laden vanuit OkHttp (optioneel)
implementation "com.squareup.okhttp3:okhttp:4.12.0"
Debug-indicator van Picasso toont een gekleurde driehoek in de hoek van elke afbeelding: rood voor netwerk laden, blauw voor schijfcache, groen voor geheugencache. Wordt ingeschakeld door setIndicatorsEnabled(true) aan te roepen op de Picasso-instantie. De standaardcache is 15% van het beschikbare geheugen van het apparaat.
Voor het configureren van een aangepaste Picasso-instantie gebruikt u Picasso.Builder. Hiermee kunt u Executor voor achtergrondthreads, Downloader voor netwerkverzoeken, MemoryCache en DiskCache instellen. Een aangepaste instantie is vooral handig in tests, waar Downloader kan worden vervangen door een stub die een afbeelding retourneert zonder netwerkverzoek.
Voorbeelden hieronder tonen typische scenario's voor het werken met Picasso: het laden van een eenvoudige afbeelding, het gebruik van transformaties en laden in RecyclerView.
Basis laden in ImageView gebeurt met één aanroep. Picasso past de afbeelding automatisch aan de afmetingen van de view aan, rekening houdend met scaleType. Placeholder wordt getoond tot het laden is voltooid en error bij een verbindingsfout.
Picasso.get()
.load("https://example.com/photo.jpg")
.placeholder(R.drawable.loading)
.error(R.drawable.broken_image)
.fit()
.centerCrop()
.into(imageView)
Transformatie BlurTransformation vervaagt de afbeelding met een bepaalde straal. Aangepaste transformaties implementeren de Transformation-interface met de methode transform. De cache slaat het transformatieresultaat op onder een unieke sleutel om het niet opnieuw toe te passen.
public class BlurTransformation implements Transformation {
@Override
public Bitmap transform(Bitmap source) {
Bitmap blurred = Bitmap.createBitmap(source);
RenderScript rs = RenderScript.create(context);
// toepassen van vervaging
source.recycle();
return blurred;
}
@Override
public String key() {
return "blur";
}
}
In RecyclerView annuleert Picasso automatisch verzoeken voor ImageView die buiten het scherm zijn verdwenen en hergebruikt reeds geladen afbeeldingen. Dit voorkomt geheugenlekken en zorgt voor vloeiend scrollen.
public void onBindViewHolder(ViewHolder holder, int position) {
String url = items.get(position).getImageUrl();
Picasso.get()
.load(url)
.fit()
.centerCrop()
.into(holder.imageView);
}
Vergelijking van Picasso en Glide is een veelgestelde vraag bij het kiezen van een bibliotheek voor het laden van afbeeldingen in Android. Beide bibliotheken lossen dezelfde taak op, maar hebben verschillende prioriteiten en gebruikskenmerken.
Picasso is meer geschikt voor projecten waar eenvoud en minimale APK-grootte belangrijk zijn. Glide wordt gekozen wanneer ondersteuning voor GIF, videoframes en maximale geheugenoptimalisatie nodig is. Glide schaalt de afbeelding automatisch naar de exacte grootte van ImageView, wat het geheugengebruik tot 50% vermindert in vergelijking met Picasso in sommige scenario's.
Volgens prestatietests toont Glide betere resultaten bij het werken met RecyclerView dankzij het mechanisme van voorladen en automatisch annuleren van verzoeken bij snel scrollen. Picasso gebruikt een eenvoudigere strategie, wat het voorspelbaar maar minder efficiënt maakt bij grote hoeveelheden data.
Picasso richt zich op API-eenvoud en minimale omvang. Glide biedt bredere functionaliteit: ondersteuning voor GIF, geanimeerde afbeeldingen, videoframes en integratie met de levenscyclus. Glide beheert ook geheugen efficiënter dankzij automatisch schalen naar ImageView-grootte.
| Criterium | Picasso | Glide |
|---|---|---|
| Bibliotheekgrootte | ~120 KB | ~500 KB |
| GIF-ondersteuning | Nee | Ja |
| Videoframes | Nee | Ja |
| Ontwikkelaar | Square | Google (Bumptech) |
| API | Fluent-keten | RequestBuilder |
Volgens Android Developer Relations wordt Glide door Google aanbevolen als de voorkeursbibliotheek voor het laden van afbeeldingen in nieuwe projecten. Picasso blijft een uitstekende keuze voor eenvoudige projecten waar geen GIF en videoframes nodig zijn.
Veelgestelde vragen
Picasso is kleiner en eenvoudiger in gebruik. Glide ondersteunt GIF en videoframes, beheert geheugen efficiënter en wordt aanbevolen door Google. De keuze hangt af van de behoefte van het project aan extra formaten.
Voor het leegmaken van de Picasso-cache gebruikt u de methode Picasso.get().invalidate(url) voor één afbeelding of shutdown() voor volledige verwijdering. De schijfcache wordt verwijderd bij herinstallatie van de app of via systeeminstellingen.
Picasso is niet afhankelijk van schermrotatie. Geladen afbeeldingen worden in de cache bewaard en daaruit weergegeven bij het opnieuw aanmaken van Activity. Gebruik ViewModel samen met Picasso voor het bewaren van geladen gegevens om te versnellen.
Ja, Picasso is volledig compatibel met Kotlin. Kotlin-ontwikkelaars kunnen extensiefuncties gebruiken voor een beknoptere syntax of de bibliotheek koptional toepassen voor het afhandelen van null-waarden bij het laden van afbeeldingen.
Picasso gebruikt LruCache voor cache in geheugen en verwijdert automatisch ongebruikte afbeeldingen. De standaard cachegrootte is 15% van het beschikbare geheugen van de app. Bij geheugentekort geeft Picasso resources vrij via onTrimMemory.
Samenvatting
We ontwikkelen een mobiele applicatie turnkey
IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.
Lees ook