Picasso: caricamento di immagini e lavoro in applicazioni Android

Autore: IT Sectr Pubblicato: 2026-05-05 Tempo di lettura: 8 min

Picasso è una libreria per il caricamento di immagini in applicazioni Android, sviluppata da Square. La libreria fornisce un’API semplice ed espressiva per caricare, memorizzare nella cache e visualizzare grafica dalla rete. Secondo le statistiche GitHub di Picasso, la libreria è stata scaricata più di 100.000 volte. Picasso gestisce automaticamente la memoria e memorizza nella cache le immagini su più livelli.

Punti chiave

  • Picasso — libreria di caricamento immagini di Square con API semplice per Android
  • Cache su disco e in memoria riduce i tempi di caricamento di immagini ripetute
  • Trasformazioni Crop, Resize e Rotate vengono applicate alle immagini al volo
  • Placeholder e immagini di errore vengono mostrati durante il caricamento e in caso di errore
  • Priorità di caricamento consentono di gestire l’ordine di visualizzazione delle immagini

Cos’è Picasso?

Picasso è una libreria per il caricamento asincrono di immagini in Android, creata da Square. Prende il nome dall’artista Pablo Picasso, riflettendo la filosofia della libreria: trasformare un compito complesso in un’API semplice ed elegante. È la libreria più popolare per il caricamento di immagini nella comunità Android.

L’architettura di Picasso è minimalista: la libreria utilizza un pool di thread per il caricamento, LruCache per la cache in memoria e DiskLruCache per la cache su disco. A differenza di Glide, Picasso non richiede configurazione di AppGlideModule ed è pronto all’uso immediatamente dopo l’aggiunta della dipendenza. Questo lo rende una scelta ideale per prototipi e progetti piccoli.

Picasso 2.8 è l’ultima versione stabile, compatibile con Android API 21+ e Java 8+. La libreria non richiede configurazione di plugin Gradle o annotazioni, semplificando la migrazione tra versioni e riducendo la probabilità di errori durante gli aggiornamenti. Nonostante la sua lunga storia, Picasso rimane richiesto in migliaia di progetti in tutto il mondo.

Il compito principale di Picasso è caricare un’immagine tramite URL, decodificarla, ridimensionarla se necessario e visualizzarla in un ImageView. La libreria gestisce automaticamente i thread in background, la cache e il riutilizzo di ImageView nelle liste.

Dal suo rilascio nel 2013, Picasso è diventato lo standard per il caricamento di immagini nella comunità Android. La libreria è utilizzata in migliaia di applicazioni grazie alla sua soglia d’ingresso minima — basta una sola riga di codice per il primo utilizzo.

Priorità e cancellazione delle richieste

Le priorità in Picasso consentono di gestire l’ordine di caricamento delle immagini. Per impostazione predefinita, tutte le richieste hanno priorità normale, ma per le immagini critiche è possibile impostare una priorità alta tramite il metodo priority. Se un ImageView viene riutilizzato (ad esempio, in RecyclerView), Picasso cancella automaticamente la richiesta precedente e ne avvia una nuova, prevenendo lo sfarfallio delle immagini durante lo scorrimento.

Caratteristiche principali di Picasso

Picasso offre un insieme di funzionalità che coprono i principali scenari di lavoro con le immagini in applicazioni mobili senza complessità superflue.

Cache multilivello

La cache di Picasso è composta da due livelli: RAM per l’accesso rapido e disco per l’archiviazione permanente. Quando si richiede un’immagine, la libreria controlla prima la cache in memoria, poi il disco e solo successivamente effettua una richiesta di rete. Questo accelera significativamente la visualizzazione di immagini caricate ripetutamente.

Trasformazioni delle immagini

Le trasformazioni consentono di ridimensionare, ritagliare o ruotare un’immagine senza decodificare ogni volta l’originale. Picasso fornisce le trasformazioni integrate CenterCrop e CenterInside e permette anche di crearne di personalizzate tramite l’interfaccia Transformation. Le immagini trasformate vengono memorizzate nella cache separatamente.

Placeholder e immagini di errore

Il placeholder viene visualizzato durante il caricamento dell’immagine dalla rete, fornendo un feedback visivo all’utente. Un’immagine di errore viene mostrata in caso di fallimento del caricamento. Picasso supporta anche un’immagine che viene visualizzata fino al caricamento di una nuova versione, utile per avatar aggiornabili.

Caricamento da diverse fonti

Picasso supporta il caricamento di immagini da URL, risorse, file, content provider e URI. Il metodo load() è sovraccaricato per tutti questi tipi e la libreria determina automaticamente la fonte. Per risorse e file, Picasso non effettua una richiesta di rete ma carica i dati direttamente, accelerando la visualizzazione della grafica integrata.

Come funziona Picasso?

Picasso utilizza un’architettura basata su RequestCreator e Dispatcher. Ogni richiesta viene creata tramite Picasso.get().load() ed eseguita in un pool di thread. Il Dispatcher gestisce la coda delle richieste, le priorità e la cancellazione quando un ImageView viene riutilizzato.

Architettura della richiesta

Quando si chiama into(view), Picasso crea un oggetto Action contenente URL, trasformazioni, destinazione e callback. L’Action viene inserita nella coda del Dispatcher. Il motore carica l’immagine tramite Downloader (OkHttp per impostazione predefinita), decodifica il Bitmap, applica le trasformazioni e consegna il risultato al thread UI. Tutte le immagini vengono automaticamente adattate alle dimensioni dell’ImageView.

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

Installazione e configurazione di Picasso

L’installazione di Picasso avviene tramite Gradle. La libreria è distribuita tramite Maven Central e non richiede configurazioni complesse. La versione minima dell’API Android è 21.

Aggiunta della dipendenza

Nel file build.gradle a livello di modulo, aggiungi implementation ‘com.squareup.picasso:picasso:2.8’. Dopo la sincronizzazione di Gradle, Picasso è pronto all’uso. Per le operazioni di rete, Picasso utilizza automaticamente OkHttp se presente nel progetto, o la HttpURLConnection integrata.

groovy
dependencies {
    implementation "com.squareup.picasso:picasso:2.8"
}

// Kafka per il caricamento da OkHttp (opzionale)
implementation "com.squareup.okhttp3:okhttp:4.12.0"

Indicatore di debug e cache

L’indicatore di debug di Picasso mostra un triangolo colorato nell’angolo di ogni immagine: rosso per il caricamento dalla rete, blu per la cache su disco, verde per la cache in memoria. Si attiva chiamando setIndicatorsEnabled(true) sull’istanza di Picasso. La dimensione predefinita della cache è il 15% della memoria disponibile del dispositivo.

Per configurare un’istanza personalizzata di Picasso, usa Picasso.Builder. Consente di impostare un Executor per i thread in background, un Downloader per le richieste di rete, MemoryCache e DiskCache. Un’istanza personalizzata è particolarmente utile nei test, dove è possibile sostituire il Downloader con uno stub che restituisce un’immagine senza richiesta di rete.

Esempi di utilizzo di Picasso

Gli esempi seguenti illustrano scenari tipici di lavoro con Picasso: caricamento di un’immagine semplice, utilizzo di trasformazioni e caricamento in RecyclerView.

Caricamento di un’immagine in ImageView

Il caricamento di base in un ImageView avviene con una singola chiamata. Picasso adatta automaticamente l’immagine alle dimensioni della vista tenendo conto di scaleType. Un placeholder viene mostrato fino al completamento del caricamento, mentre un’immagine di errore viene visualizzata in caso di errore di connessione.

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

Applicazione di una trasformazione personalizzata

BlurTransformation sfoca l’immagine con un raggio specificato. Le trasformazioni personalizzate implementano l’interfaccia Transformation con il metodo transform. La cache memorizza il risultato della trasformazione sotto una chiave univoca per evitare di riapplicarla.

java
public class BlurTransformation implements Transformation {
    @Override
    public Bitmap transform(Bitmap source) {
        Bitmap blurred = Bitmap.createBitmap(source);
        RenderScript rs = RenderScript.create(context);
        // applicazione della sfocatura
        source.recycle();
        return blurred;
    }

    @Override
    public String key() {
        return "blur";
    }
}

Caricamento di immagini in RecyclerView

In RecyclerView, Picasso cancella automaticamente le richieste per gli ImageView che sono usciti dallo schermo e riutilizza le immagini già caricate. Questo previene perdite di memoria e garantisce uno scorrimento fluido.

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

Picasso vs Glide: confronto tra librerie

Il confronto tra Picasso e Glide è una domanda comune nella scelta di una libreria di caricamento immagini per Android. Entrambe le librerie risolvono lo stesso compito ma hanno priorità e caratteristiche d’uso diverse.

Picasso è più adatto per progetti in cui semplicità e dimensioni minime dell’APK sono importanti. Glide viene scelto quando sono necessari supporto GIF, fotogrammi video e massima ottimizzazione della memoria. Glide ridimensiona automaticamente l’immagine alla dimensione esatta dell’ImageView, riducendo il consumo di memoria fino al 50% rispetto a Picasso in alcuni scenari.

Nei test di performance, Glide mostra risultati migliori quando lavora con RecyclerView grazie al meccanismo di precaricamento e alla cancellazione automatica delle richieste durante lo scorrimento veloce. Picasso utilizza una strategia più semplice, che lo rende prevedibile ma meno efficiente su grandi volumi di dati.

Picasso si concentra sulla semplicità dell’API e sulle dimensioni minime. Glide offre funzionalità più ampie: supporto per GIF, immagini animate, fotogrammi video e integrazione con il ciclo di vita. Glide gestisce anche la memoria in modo più efficiente grazie al ridimensionamento automatico alle dimensioni dell’ImageView.

CriterioPicassoGlide
Dimensione libreria~120 KB~500 KB
Supporto GIFNo
Fotogrammi videoNo
SviluppatoreSquareGoogle (Bumptech)
APICatena fluidaRequestBuilder

Secondo Android Developer Relations, Google raccomanda Glide come libreria preferita per il caricamento di immagini nei nuovi progetti. Picasso rimane un’ottima scelta per progetti semplici dove GIF e fotogrammi video non sono necessari.

Domande frequenti

In cosa differisce Picasso da Glide?

Picasso è più piccolo e più facile da usare. Glide supporta GIF e fotogrammi video, gestisce la memoria in modo più efficiente ed è raccomandato da Google. La scelta dipende dalle esigenze del progetto per formati aggiuntivi.

Come svuotare la cache di Picasso?

Per svuotare la cache di Picasso, usa il metodo Picasso.get().invalidate(url) per una singola immagine o shutdown() per una pulizia completa. La cache su disco viene eliminata quando si reinstallano l’app o tramite le impostazioni di sistema.

Come gestisce Picasso la rotazione dello schermo?

Picasso non dipende dalla rotazione dello schermo. Le immagini caricate vengono conservate nella cache e visualizzate da essa quando l’Activity viene ricreata. Per accelerare, usa ViewModel insieme a Picasso per preservare i dati caricati.

Si può usare Picasso con Kotlin?

, Picasso è completamente compatibile con Kotlin. Gli sviluppatori Kotlin possono utilizzare funzioni di estensione per una sintassi più concisa o applicare la libreria koptional per gestire i valori null durante il caricamento delle immagini.

Come gestisce Picasso la memoria?

Picasso utilizza LruCache per la cache in memoria, ripulendo automaticamente le immagini inutilizzate. La dimensione predefinita della cache è il 15% della memoria disponibile dell’app. Quando la memoria è scarsa, Picasso libera risorse tramite onTrimMemory.

Riepilogo

  • Picasso — libreria leggera di caricamento immagini di Square con API minima
  • Cache su disco e in memoria con gestione automatica delle dimensioni
  • Trasformazioni CenterCrop, CenterInside e personalizzate tramite interfaccia Transformation
  • Placeholder e immagini di errore per un’esperienza utente fluida
  • Cancellazione automatica delle richieste in RecyclerView evita caricamenti inutili
  • Indicatore di debug aiuta a identificare visivamente la fonte dell’immagine
  • Dimensione libreria di soli 120 KB — impatto minimo sulla dimensione dell’APK

Svilupperemo un'applicazione mobile chiavi in mano

IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.

Discuti il progetto

Leggi anche