Picasso: vad är det, bildladdning och arbete i Android-applikationer

Författare: IT Sectr Publicerad: 2026-05-05 Lästid: 8 min

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 — bildladdningsbibliotek från Square med enkelt API för Android
  • Cachning på disk och i minne minskar laddningstiden för återkommande bilder
  • Transformationer Crop, Resize och Rotate tillämpas på bilder i farten
  • Placeholder och felbilder visas under laddning och vid fel
  • Laddningsprioriteringar gör det möjligt att hantera ordningen för bildvisning

Vad är Picasso?

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 och annullering av förfrågningar

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.

Huvudsakliga funktioner i Picasso

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.

Flernivåcachning

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.

Bildtransformationer

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 och felbilder

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.

Laddning från olika källor

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.

Hur fungerar Picasso?

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.

Förfrågningsarkitektur

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.

java
Picasso.get()
    .load("https://example.com/image.jpg")
    .placeholder(R.drawable.placeholder)
    .error(R.drawable.error)
    .resize(400, 300)
    .centerCrop()
    .into(imageView)

Installation och konfiguration av Picasso

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.

Lägga till beroende

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.

groovy
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-indikator och cache

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 på användning av Picasso

Exempel nedan visar typiska scenarier för att arbeta med Picasso: laddning av en enkel bild, användning av transformationer och laddning i RecyclerView.

Ladda bild i ImageView

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.

java
Picasso.get()
    .load("https://example.com/photo.jpg")
    .placeholder(R.drawable.loading)
    .error(R.drawable.broken_image)
    .fit()
    .centerCrop()
    .into(imageView)

Tillämpa anpassad transformation

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.

java
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";
    }
}

Ladda bilder i RecyclerView

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.

java
public void onBindViewHolder(ViewHolder holder, int position) {
    String url = items.get(position).getImageUrl();
    Picasso.get()
        .load(url)
        .fit()
        .centerCrop()
        .into(holder.imageView);
}

Picasso eller Glide: jämförelse av bibliotek

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.

KriteriumPicassoGlide
Biblioteksstorlek~120 KB~500 KB
GIF-stödNejJa
VideoramarNejJa
UtvecklareSquareGoogle (Bumptech)
APIFluent-kedjaRequestBuilder

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

Vad skiljer Picasso från Glide?

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.

Hur rensar man Picassos cache?

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.

Hur hanterar Picasso skärmrotation?

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.

Kan man använda Picasso i Kotlin?

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.

Hur hanterar Picasso minnet?

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

  • Picasso — lätt bildladdningsbibliotek från Square med minimalt API
  • Cachning på disk och i minne med automatisk storlekshantering
  • Transformationer CenterCrop, CenterInside och anpassade via Transformation-gränssnittet
  • Placeholder och felbilder för en smidig användarupplevelse
  • Automatisk annullering av förfrågningar i RecyclerView förhindrar onödig laddning
  • Debug-indikatorn hjälper till att visuellt bestämma bildkällan
  • Biblioteksstorlek endast 120 KB — minimal påverkan på APK-storleken

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.

Diskutera projektet

Läs också