Picasso är ett bibliotek för att ladda bilder i Android-applikationer, utvecklat av Square. Biblioteket tillhandahåller ett enkelt och uttrycksfullt API för att ladda, cacha och visa grafik från nätverket. Enligt GitHub-statistik för Picasso har biblioteket laddats ner mer än 100 000 gånger. Picasso hanterar automatiskt minnet och cachar bilder på flera nivåer.
Huvudpunkter
Picasso är ett bibliotek för asynkron bildladdning i Android, skapat av Square. Namnet kommer från konstnären Pablo Picasso och återspeglar bibliotekets filosofi: att omvandla en komplex uppgift till ett enkelt och elegant API. Det är det mest populära biblioteket för bildladdning i Android-gemenskapen.
Arkitekturen i Picasso är minimalistisk: biblioteket använder en trådpool för laddning, LruCache för cache i minnet och DiskLruCache för cache på disk. Till skillnad från Glide kräver Picasso ingen konfiguration av AppGlideModule och är redo att användas direkt efter att beroendet har lagts till. Detta gör det till ett idealiskt val för prototyper och små projekt.
Picasso 2.8 — den senaste stabila versionen, kompatibel med Android API 21+ och Java 8+. Biblioteket kräver ingen konfiguration av Gradle-plugin-program eller anteckningar, vilket förenklar migrering mellan versioner och minskar risken för fel vid uppdatering. Trots sin långa historia är Picasso fortfarande efterfrågat i tusentals projekt världen över.
Huvuduppgiften för Picasso är att ladda en bild från URL, avkoda den, ändra storlek om det behövs och visa den i ImageView. Biblioteket hanterar automatiskt bakgrundstrådar, cache och återanvändning av ImageView i listor.
Sedan lanseringen 2013 har Picasso blivit standarden för bildladdning i Android-gemenskapen. Biblioteket används i tusentals applikationer tack vare den minimala tröskeln — för första användningen räcker en enda kodrad.
Prioriteringar i Picasso gör det möjligt att hantera laddningsordningen för bilder. Som standard har alla förfrågningar normal prioritet, men för kritiska bilder kan hög prioritet ställas in via metoden priority. Om ImageView återanvänds (t.ex. i RecyclerView) annullerar Picasso automatiskt den tidigare förfrågan och startar en ny, vilket förhindrar att bilder flimrar vid rullning.
Picasso erbjuder en uppsättning funktioner som täcker de grundläggande scenarierna för att arbeta med bilder i mobila applikationer utan onödig komplexitet.
Cache i Picasso består av två nivåer: RAM-minne för snabb åtkomst och disk för permanent lagring. Vid en bildförfrågan kontrollerar biblioteket först cache i minnet, sedan disken och först därefter utförs en nätverksförfrågan. Detta påskyndar avsevärt visningen av bilder som laddas upprepade gånger.
Transformationer gör det möjligt att ändra storlek, beskära eller rotera bilden utan att avkoda originalbilden varje gång. Picasso tillhandahåller inbyggda transformationer CenterCrop och CenterInside och gör det möjligt att skapa anpassade transformationer via gränssnittet Transformation. Transformerade bilder cachas separat.
Placeholder visas under laddning av bilden från nätverket och ger användaren visuell återkoppling. Felbilden visas när laddningen misslyckas. Picasso stöder också en bild som visas tills en ny version har laddats, vilket är användbart för uppdateringsbara avatarer.
Picasso stöder laddning av bilder från URL, resurser, filer, innehållsleverantörer och URI. Metoden load() är överlagrad för alla dessa typer och biblioteket bestämmer automatiskt källan. För resurser och filer utför Picasso ingen nätverksförfrågan utan laddar data direkt, vilket påskyndar visningen av inbyggd grafik.
Picasso använder en arkitektur baserad på RequestCreator och Dispatcher. Varje förfrågan skapas via Picasso.get().load() och utförs i en trådpool. Dispatcher hanterar förfrågningskön, prioriteringar och annullering av förfrågningar vid återanvändning av ImageView.
Vid anrop av into(view) skapar Picasso ett Action-objekt som innehåller URL, transformationer, target och callback. Action placeras i Dispatcherns kö. Motorn laddar bilden via Downloader (standard OkHttp), avkodar Bitmap, tillämpar transformationer och returnerar resultatet till UI-tråden. Alla bilder anpassas automatiskt till ImageView-storleken.
Picasso.get()
.load("https://example.com/image.jpg")
.placeholder(R.drawable.placeholder)
.error(R.drawable.error)
.resize(400, 300)
.centerCrop()
.into(imageView)
Installation av Picasso görs via Gradle. Biblioteket distribueras via Maven Central och kräver ingen komplicerad konfiguration. Den lägsta Android API-versionen är 21.
I filen build.gradle på modulnivå lägger du till implementation 'com.squareup.picasso:picasso:2.8'. Efter synkronisering av Gradle är Picasso redo att användas. För nätverksarbete använder Picasso automatiskt OkHttp om det finns i projektet, eller den inbyggda HttpURLConnection.
dependencies {
implementation "com.squareup.picasso:picasso:2.8"
}
// Kafka för laddning från OkHttp (valfritt)
implementation "com.squareup.okhttp3:okhttp:4.12.0"
Debug-indikatorn i Picasso visar en färgad triangel i hörnet av varje bild: röd för nätverksladdning, blå för diskcache, grön för minnescache. Aktiveras genom att anropa setIndicatorsEnabled(true) på Picasso-instansen. Standardcache är 15% av enhetens tillgängliga minne.
För att konfigurera en anpassad Picasso-instans, använd Picasso.Builder. Det gör det möjligt att ställa in Executor för bakgrundstrådar, Downloader för nätverksförfrågningar, MemoryCache och DiskCache. En anpassad instans är särskilt användbar i tester där Downloader kan ersättas med en stub som returnerar en bild utan nätverksförfrågan.
Exempel nedan visar typiska scenarier för att arbeta med Picasso: laddning av en enkel bild, användning av transformationer och laddning i RecyclerView.
Grundläggande laddning i ImageView görs med ett enda anrop. Picasso anpassar automatiskt bilden till vyns dimensioner med hänsyn till scaleType. Placeholder visas tills laddningen är klar och error vid ett anslutningsfel.
Picasso.get()
.load("https://example.com/photo.jpg")
.placeholder(R.drawable.loading)
.error(R.drawable.broken_image)
.fit()
.centerCrop()
.into(imageView)
Transformation BlurTransformation oskärper bilden med en given radie. Anpassade transformationer implementerar Transformation-gränssnittet med metoden transform. Cachen sparar transformationsresultatet under en unik nyckel för att inte behöva tillämpa den igen.
public class BlurTransformation implements Transformation {
@Override
public Bitmap transform(Bitmap source) {
Bitmap blurred = Bitmap.createBitmap(source);
RenderScript rs = RenderScript.create(context);
// tillämpning av oskärpa
source.recycle();
return blurred;
}
@Override
public String key() {
return "blur";
}
}
I RecyclerView annullerar Picasso automatiskt förfrågningar för ImageView som har lämnat skärmen och återanvänder redan laddade bilder. Detta förhindrar minnesläckor och säkerställer smidig rullning.
public void onBindViewHolder(ViewHolder holder, int position) {
String url = items.get(position).getImageUrl();
Picasso.get()
.load(url)
.fit()
.centerCrop()
.into(holder.imageView);
}
Jämförelse av Picasso och Glide är en vanlig fråga när man väljer bildladdningsbibliotek för Android. Båda biblioteken löser samma uppgift men har olika prioriteringar och användningsegenskaper.
Picasso passar bättre för projekt där enkelhet och minimal APK-storlek är viktiga. Glide väljs när stöd för GIF, videoramar och maximal minnesoptimering behövs. Glide skalar automatiskt bilden till ImageView exakta storlek, vilket minskar minnesförbrukningen med upp till 50% jämfört med Picasso i vissa scenarier.
Enligt prestandatester visar Glide bättre resultat vid arbete med RecyclerView tack vare förladdningsmekanismen och automatisk annullering av förfrågningar vid snabb rullning. Picasso använder en enklare strategi, vilket gör det förutsägbart men mindre effektivt vid stora datamängder.
Picasso fokuserar på API-enkelhet och minimal storlek. Glide erbjuder bredare funktionalitet: stöd för GIF, animerade bilder, videoramar och integration med livscykeln. Glide hanterar också minnet mer effektivt tack vare automatisk skalning till ImageView-storlek.
| Kriterium | Picasso | Glide |
|---|---|---|
| Biblioteksstorlek | ~120 KB | ~500 KB |
| GIF-stöd | Nej | Ja |
| Videoramar | Nej | Ja |
| Utvecklare | Square | Google (Bumptech) |
| API | Fluent-kedja | RequestBuilder |
Enligt Android Developer Relations rekommenderas Glide av Google som det föredragna biblioteket för bildladdning i nya projekt. Picasso är fortfarande ett utmärkt val för enkla projekt där GIF och videoramar inte behövs.
Vanliga frågor
Picasso är mindre och enklare att använda. Glide stöder GIF och videoramar, hanterar minnet effektivare och rekommenderas av Google. Valet beror på projektets behov av ytterligare format.
För rensning av Picassos cache, använd metoden Picasso.get().invalidate(url) för en enskild bild eller shutdown() för fullständig rensning. Disk-cachen tas bort vid ominstallation av appen eller via systeminställningar.
Picasso är inte beroende av skärmrotation. Laddade bilder sparas i cache och visas därifrån när Activity återskapas. För att påskynda, använd ViewModel tillsammans med Picasso för att spara laddad data.
Ja, Picasso är fullt kompatibelt med Kotlin. Kotlin-utvecklare kan använda tilläggsfunktioner för mer kortfattad syntax eller använda biblioteket koptional för att hantera null-värden vid bildladdning.
Picasso använder LruCache för cache i minnet och rensar automatiskt oanvända bilder. Standard cache-storlek är 15% av appens tillgängliga minne. Vid minnesbrist frigör Picasso resurser via onTrimMemory.
Sammanfattning
Vi utvecklar en mobil applikation nyckelfärdigt
IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.
Läs också