Glide è una libreria per il caricamento di immagini in Android, supportata da Google attraverso il progetto Bumptech. La libreria offre un caricamento efficiente di immagini, animazioni GIF e fotogrammi video con gestione automatica della memoria. Secondo il repository GitHub di Glide, il progetto è utilizzato da oltre 200.000 applicazioni. Glide è raccomandato da Google come libreria preferita per il caricamento di grafica in Android.
Punti chiave
Glide è una libreria per il caricamento rapido ed efficiente di immagini, GIF animate e fotogrammi video nelle applicazioni Android. Il progetto è sviluppato da Bumptech sotto l'egida di Google ed è ampiamente utilizzato nelle applicazioni ufficiali di Google.
L'architettura interna di Glide è costruita su un approccio basato su componenti: Engine gestisce l'esecuzione delle richieste, DecodeJob si occupa della decodifica e ResourceDecoder converte i dati grezzi in Bitmap o Drawable. Ogni fase può essere personalizzata tramite moduli e registri, rendendo Glide una libreria estremamente flessibile per formati di immagine non standard.
A differenza di molti concorrenti, Glide è stato progettato fin dall'inizio tenendo conto delle specificità di Android: ciclo di vita di Activity e Fragment, rotazioni dello schermo, cambi di configurazione. La libreria sospende e riprende automaticamente i caricamenti in base allo stato del componente.
Secondo Android Developers, Glide è la libreria consigliata per il caricamento di immagini nella documentazione ufficiale di Google. Viene utilizzata in Google Play, Google Maps e altri prodotti dell'azienda, confermando la sua affidabilità e prestazioni.
La differenza principale tra Glide e le alternative è il ridimensionamento automatico delle immagini per adattarsi alla dimensione dell'ImageView. Mentre Picasso carica l'immagine a piena risoluzione e poi la ridimensiona, Glide decodifica il file direttamente nella dimensione necessaria. Questo riduce il consumo di picco della memoria e velocizza la visualizzazione in liste con diverse dimensioni di cella.
Glide fornisce un'ampia gamma di funzioni per lavorare con le immagini, coprendo scenari di caricamento semplici e complessi.
GIF e WebP animati vengono caricati e visualizzati da Glide con la stessa facilità delle immagini statiche. La libreria rileva automaticamente il formato dal tipo MIME e decodifica l'animazione, mostrando i fotogrammi in un thread in background. I metodi asGif e asBitmap sono disponibili per il controllo della riproduzione.
Glide si lega automaticamente al ciclo di vita di Activity, Fragment e View. Quando un'Activity viene messa in pausa, i caricamenti vengono sospesi; quando viene distrutta, vengono annullati. Questo previene perdite di memoria e il caricamento di immagini per schermi già chiusi. L'integrazione funziona tramite il supporto di LifecycleOwner.
Glide può estrarre fotogrammi da video tramite URL o percorso locale. Il metodo asBitmap() in combinazione con load() viene utilizzato per gli URI video. Glide seleziona automaticamente un fotogramma chiave o un fotogramma a un timestamp specificato. Questo è utile per mostrare anteprime video.
GlideApp è una classe generata che fornisce un'API estesa basata sulla configurazione di AppGlideModule. Consente di utilizzare metodi non disponibili in Glide.with standard: caricamento con opzioni personalizzate predefinite, integrazione con librerie e trasformazioni preimpostate. La generazione richiede l'annotazione @GlideModule in una classe che estende AppGlideModule.
Glide utilizza un'architettura a più livelli con motore, decodificatori, trasformazioni e cache. Ogni richiesta passa attraverso una catena di gestori che ottimizzano il caricamento per uno specifico ImageView.
Quando viene chiamato into(view), Glide controlla la cache: risorse attive, cache in memoria, cache su disco e solo poi la rete. L'immagine viene automaticamente ridimensionata alla dimensione dell'ImageView di destinazione tenendo conto della densità dello schermo e del scaleType. Questo riduce l'utilizzo della memoria — un vantaggio chiave di Glide.
Glide.with(context)
.load("https://example.com/image.jpg")
.placeholder(R.drawable.loading)
.error(R.drawable.error)
.override(400, 300)
.centerCrop()
.into(imageView)
L'installazione di Glide viene eseguita tramite Gradle. La libreria richiede la configurazione tramite AppGlideModule per la generazione dell'API. La versione minima dell'API Android è 21.
Nel build.gradle, aggiungi Glide con il processore di annotazioni kapt per la generazione dell'API GlideApp. Per Kotlin, usa kapt invece di annotationProcessor. Glide versione 4.16+ funziona stabilmente con Android Gradle Plugin 8.x.
dependencies {
implementation "com.github.bumptech.glide:glide:4.16.0"
annotationProcessor "com.github.bumptech.glide:compiler:4.16.0"
}
// Usa kapt per Kotlin
// kapt "com.github.bumptech.glide:compiler:4.16.0"
AppGlideModule è un componente obbligatorio per configurare Glide. Consente di impostare la dimensione della cache, uno HttpStack personalizzato e registrare decodificatori personalizzati. Il modulo viene scansionato da Glide all'avvio dell'applicazione. L'annotazione @GlideModule lo registra automaticamente.
@GlideModule
public class MyGlideModule extends AppGlideModule {
@Override
public void applyOptions(Context context, GlideBuilder builder) {
int diskCacheSize = 250 * 1024 * 1024;
builder.setDiskCache(
new DiskLruCacheFactory(cacheDir.getPath(), diskCacheSize)
);
}
}
Gli esempi seguenti mostrano scenari tipici: caricamento di immagini, lavoro con GIF ed estrazione di fotogrammi video.
Il caricamento di base tramite Glide.with().load().into() — codice minimo per visualizzare un'immagine dalla rete. Glide si adatta automaticamente alla dimensione dell'ImageView. Il placeholder viene mostrato durante il caricamento e error in caso di fallimento.
Glide.with(fragment)
.load("https://example.com/photo.jpg")
.placeholder(R.drawable.placeholder)
.error(R.drawable.error)
.skipMemoryCache(true)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.into(imageView)
Un GIF viene caricato come un'immagine statica — Glide rileva automaticamente il formato dal tipo di contenuto. Per forzare il caricamento come immagine statica, usa asBitmap(); per GIF, usa asGif(). Glide decodifica efficientemente solo i fotogrammi visibili.
Glide.with(context)
.asGif()
.load("https://example.com/animation.gif")
.into(imageView)
// Caricare il primo fotogramma di un GIF come immagine statica
Glide.with(context)
.asBitmap()
.load("https://example.com/animation.gif")
.into(imageView)
Un fotogramma video viene estratto da Glide da un URI video locale o remoto. Per impostazione predefinita, Glide carica il fotogramma chiave. Per specificare un timestamp preciso, usa frameMillis. Questo è comodo per mostrare anteprime in una galleria video.
String videoUrl = "https://example.com/video.mp4";
Glide.with(context)
.asBitmap()
.load(videoUrl)
.override(200, 200)
.into(imageView)
L'ottimizzazione di Glide per RecyclerView è un'abilità fondamentale nello sviluppo di applicazioni con un gran numero di immagini. Una configurazione appropriata previene rallentamenti ed errori OOM.
Una delle funzionalità chiave di Glide è l'integrazione con RecyclerView tramite RecyclerViewPreloader. Questo componente analizza la velocità e la direzione dello scorrimento, precaricando le immagini che appariranno sullo schermo tra pochi elementi. Per utilizzare il precaricatore, è necessario implementare l'interfaccia PreloadSizeProvider e passarla al costruttore insieme all'ImageView di destinazione.
L'uso del metodo override() con dimensioni esatte dell'ImageView accelera significativamente il caricamento. Quando Glide conosce la dimensione esatta della destinazione, può decodificare l'immagine direttamente alla risoluzione richiesta, saltando la fase di ridimensionamento. Questo riduce il tempo di decodifica e il consumo di picco della memoria del 30–40%.
Per feed con contenuto eterogeneo, usa diversi RequestOptions per ogni tipo di elemento. Ad esempio, per grandi immagini banner, puoi impostare override(1200, 600) e qualità RGB_565, mentre per gli avatar — override(200, 200) e arrotondamento tramite transform. Questo approccio utilizza le risorse in modo ottimale per ogni tipo di contenuto.
Glide offre opzioni flessibili per la gestione degli errori tramite immagini di errore e RequestListener personalizzato. RequestListener consente di reagire al caricamento riuscito o al fallimento — registrare errori o inviare analisi. Puoi anche configurare un fallback — un'immagine mostrata quando load() riceve null invece di un URL.
Usa RecyclerViewPreloader per precaricare le immagini prima che l'utente scorra fino ad esse. Glide supporta l'integrazione con RecyclerView tramite un precaricatore che analizza la velocità di scorrimento e carica le immagini in anticipo.
La moltiplicazione delle thumbnail consente di mostrare prima una versione ridotta dell'immagine, poi caricare la versione completa. Chiamare thumbnail(0.25f) carica una versione al 25% della dimensione che viene visualizzata immediatamente, mentre l'immagine a dimensione intera viene caricata dopo. Questo crea l'impressione di un caricamento istantaneo.
Per gli adattatori di lista, usa .override() con dimensioni esatte dell'ImageView in modo che Glide non ridimensioni l'immagine ogni volta. Questo riduce il carico della CPU e il consumo di memoria. La dimensione della cache viene selezionata sperimentalmente, ma 250 MB per il disco e il 20% della memoria disponibile sono un buon punto di partenza.
Domande frequenti
Glide supporta GIF, fotogrammi video e WebP animati. Gestisce la memoria in modo più efficiente ed è raccomandato da Google. Picasso è più piccolo e più semplice da usare. Per progetti complessi, scegli Glide.
Glide accetta un LifecycleOwner (Fragment, Activity) o una View. La libreria traccia automaticamente lo stato tramite LifecycleObserver: sospende il caricamento in pausa e lo annulla alla distruzione, prevenendo perdite.
Sì, usa asBitmap() prima di load(). Glide caricherà il GIF come immagine statica e mostrerà solo il primo fotogramma. Questo è utile per le liste dove l'animazione GIF non è desiderata per motivi di prestazioni.
La cache di Glide è composta da tre livelli: risorse attive (attualmente in uso), memoria (cache LRU) e disco (LruCache). Le immagini caricate dalla cache vengono visualizzate istantaneamente. La cache viene automaticamente cancellata quando la memoria è scarsa.
Un client HTTP personalizzato viene registrato tramite OkHttpUrlLoader in AppGlideModule. Sovrascrivi registerComponents e registra il tuo OkHttpClient. Questo consente di aggiungere intercettori, certificati e timeout personalizzati.
Riepilogo
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.
Leggi anche