Glide — is een bibliotheek voor het laden van afbeeldingen in Android, ondersteund door Google via het Bumptech-project. De bibliotheek zorgt voor efficiënt laden van afbeeldingen, GIF-animaties en videoframes met automatisch geheugenbeheer. Volgens gegevens van het GitHub-repository van Glide, wordt het project gebruikt door meer dan 200.000 apps. Glide wordt door Google aanbevolen als de voorkeursbibliotheek voor het laden van grafische afbeeldingen in Android.
Belangrijkste punten
Glide — is een bibliotheek voor het snel en efficiënt laden van afbeeldingen, geanimeerde GIFs en videoframes in Android-applicaties. Het project wordt ontwikkeld door Bumptech onder de vleugels van Google en wordt veel gebruikt in officiële Google-applicaties.
De interne architectuur van Glide is gebaseerd op een componentgerichte aanpak: Engine beheert de uitvoering van verzoeken, DecodeJob zorgt voor decodering en ResourceDecoder zet ruwe gegevens om in Bitmap of Drawable. Elke fase kan worden aangepast via modules en registers, wat Glide een uiterst flexibele bibliotheek maakt voor niet-standaard afbeeldingsformaten.
In tegenstelling tot veel concurrenten is Glide vanaf het begin ontworpen met het oog op de specifieke kenmerken van Android: de levenscyclus van Activity en Fragment, schermrotaties, configuratiewijzigingen. De bibliotheek onderbreekt en hervat automatisch het laden afhankelijk van de status van het component.
Volgens Android Developers is Glide de aanbevolen bibliotheek voor het laden van afbeeldingen in de officiële Google-documentatie. Het wordt gebruikt in Google Play, Google Maps en andere producten van het bedrijf, wat de betrouwbaarheid en prestaties bevestigt.
Het belangrijkste verschil van Glide met alternatieven — het automatisch schalen van afbeeldingen naar de grootte van ImageView. Als Picasso de afbeelding in volledige resolutie laadt en vervolgens schaalt, decodeert Glide het bestand direct in de benodigde grootte. Dit vermindert het piekgeheugengebruik en versnelt de weergave in lijsten met verschillende celgroottes.
Glide biedt een breed scala aan functies voor het werken met afbeeldingen, dat zowel eenvoudige als complexe scenario's voor het laden van inhoud dekt.
GIF en geanimeerde WebP worden door Glide net zo eenvoudig geladen en weergegeven als statische afbeeldingen. De bibliotheek detecteert automatisch het formaat op basis van het MIME-type en decodeert de animatie, waarbij de frames op de achtergrond worden weergegeven. Voor het beheren van de afspeling zijn de methoden asGif en asBitmap beschikbaar.
Glide koppelt zich automatisch aan de levenscyclus van Activity, Fragment en View. Bij pauzeren van Activity wordt het laden onderbroken, bij vernietiging geannuleerd. Dit voorkomt geheugenlekken en het laden van afbeeldingen voor reeds gesloten schermen. De integratie werkt via ondersteuning van LifecycleOwner.
Glide kan frames uit video halen via URL of lokaal pad. Hiervoor wordt de methode asBitmap() gebruikt in combinatie met load() voor video-URI. Glide selecteert automatisch het sleutelframe of het frame op een opgegeven tijdstip. Dit is handig voor het tonen van videovoorvertoningen.
GlideApp — is een gegenereerde klasse die een uitgebreide API biedt op basis van de AppGlideModule-configuratie. Hiermee kunnen methoden worden gebruikt die niet beschikbaar zijn in de standaard Glide.with: laden met aangepaste standaardopties, integratie met bibliotheken en vooraf ingestelde transformaties. Voor het genereren is de @GlideModule-annotatie vereist in een klasse die overerft van AppGlideModule.
Glide gebruikt een gelaagde architectuur met engine, decoders, transformaties en cache. Elk verzoek doorloopt een keten van handlers die het laden optimaliseren voor een specifieke ImageView.
Bij het aanroepen van into(view) controleert Glide de cache: actieve bronnen, cache in RAM, schijfcache en pas daarna het netwerk. De afbeelding wordt automatisch geschaald naar de grootte van de doel-ImageView, rekening houdend met de schermdichtheid en scaleType. Dit vermindert het geheugengebruik — het belangrijkste voordeel van Glide.
Glide.with(context)
.load("https://example.com/image.jpg")
.placeholder(R.drawable.loading)
.error(R.drawable.error)
.override(400, 300)
.centerCrop()
.into(imageView)
Installatie van Glide gebeurt via Gradle. De bibliotheek vereist configuratie via AppGlideModule voor het genereren van de API. Minimale Android API-versie — 21.
Voeg in build.gradle Glide toe met de kapt-annotatieverwerker voor het genereren van de GlideApp-API. Gebruik voor Kotlin kapt in plaats van annotationProcessor. Versie Glide 4.16+ werkt stabiel met Android Gradle Plugin 8.x.
dependencies {
implementation "com.github.bumptech.glide:glide:4.16.0"
annotationProcessor "com.github.bumptech.glide:compiler:4.16.0"
}
// Gebruik kapt voor Kotlin
// kapt "com.github.bumptech.glide:compiler:4.16.0"
AppGlideModule — een verplicht component voor het configureren van Glide. Het maakt het mogelijk om de cachegrootte, aangepaste HttpStack in te stellen en eigen decoders te registreren. De module wordt door Glide gescand bij het opstarten van de app. De @GlideModule-annotatie registreert deze automatisch.
@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)
);
}
}
Voorbeelden hieronder tonen typische scenario's: afbeelding laden, werken met GIF en videoframe extraheren.
Basis laden via Glide.with().load().into() — minimale code voor het tonen van een afbeelding van het netwerk. Glide past automatisch de grootte van ImageView aan. Placeholder wordt getoond tijdens het laden, error bij een fout.
Glide.with(fragment)
.load("https://example.com/photo.jpg")
.placeholder(R.drawable.placeholder)
.error(R.drawable.error)
.skipMemoryCache(true)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.into(imageView)
GIF wordt net als een statische afbeelding geladen — Glide detecteert automatisch het formaat op basis van het inhoudstype. Gebruik asBitmap() voor geforceerd laden als statische afbeelding en asGif() voor GIF. Glide decodeert alleen de zichtbare frames efficiënt.
Glide.with(context)
.asGif()
.load("https://example.com/animation.gif")
.into(imageView)
// Laad het eerste frame van GIF als statische afbeelding
Glide.with(context)
.asBitmap()
.load("https://example.com/animation.gif")
.into(imageView)
Videoframe wordt door Glide geëxtraheerd op basis van de URI van een lokale of externe video. Standaard laadt Glide het sleutelframe. Voor het specificeren van een concreet tijdstip wordt frameMillis gebruikt. Dit is handig voor het tonen van voorvertoningen in een videogalerij.
String videoUrl = "https://example.com/video.mp4";
Glide.with(context)
.asBitmap()
.load(videoUrl)
.override(200, 200)
.into(imageView)
Optimalisatie van Glide voor RecyclerView — een kritieke vaardigheid bij het ontwikkelen van apps met veel afbeeldingen. Correcte configuratie voorkomt vertragingen en OOM-fouten.
Een van de belangrijkste functies van Glide — integratie met RecyclerView via RecyclerViewPreloader. Dit component analyseert de scrollsnelheid en bewegingsrichting, en laadt afbeeldingen vooraf die over enkele elementen op het scherm verschijnen. Voor het werken met de preloader moet de PreloadSizeProvider-interface worden geïmplementeerd en worden doorgegeven aan de constructor samen met de doel-ImageView.
Het gebruik van de methode override() met exacte ImageView-afmetingen versnelt het laden aanzienlijk. Wanneer Glide de exacte grootte van het doel kent, kan het de afbeelding direct decoderen in de benodigde resolutie, waarbij de schaalfase wordt overgeslagen. Dit verkort de decoderingstijd en vermindert het piekgeheugengebruik met 30–40%.
Gebruik voor feeds met heterogene inhoud verschillende RequestOptions voor elk type element. Voor grote bannerafbeeldingen kan men bijvoorbeeld override(1200, 600) en RGB_565-kwaliteit instellen, en voor avatars — override(200, 200) en afronding via transform. Deze aanpak maakt optimaal gebruik van bronnen voor elk type inhoud.
Glide biedt flexibele mogelijkheden voor foutafhandeling via error-afbeeldingen en aangepaste RequestListener. RequestListener maakt het mogelijk te reageren op succesvol laden of fouten, storingen te loggen of analyses te verzenden. Men kan ook een fallback configureren — een afbeelding die wordt getoond wanneer load() null ontvangt in plaats van een link.
Gebruik RecyclerViewPreloader voor het vooraf laden van afbeeldingen voordat de gebruiker ernaartoe scrollt. Glide ondersteunt integratie met RecyclerView via een preloader die de scrollsnelheid analyseert en afbeeldingen vooraf laadt.
Thumbnail-multiplicatie maakt het mogelijk eerst een verkleinde versie van de afbeelding te tonen en vervolgens de volledige te laden. Aanroep thumbnail(0.25f) laadt een versie van 25% grootte, die onmiddellijk wordt weergegeven, terwijl de volledige afbeelding later wordt geladen. Dit creëert het gevoel van onmiddellijk laden.
Gebruik voor lijstadapter .override() met exacte ImageView-afmetingen, zodat Glide de afbeelding niet elke keer hoeft te schalen. Dit vermindert de CPU-belasting en het geheugengebruik. De cachegrootte wordt experimenteel bepaald, maar 250 MB voor de schijf en 20% van het beschikbare geheugen zijn een goed startpunt.
Veelgestelde vragen
Glide ondersteunt GIF, videoframes en geanimeerde WebP. Het beheert geheugen efficiënter en wordt aanbevolen door Google. Picasso is kleiner en eenvoudiger in gebruik. Kies voor complexe projecten Glide.
Glide accepteert LifecycleOwner (Fragment, Activity) of View. De bibliotheek volgt automatisch de status via LifecycleObserver: onderbreekt het laden bij pauze en annuleert bij vernietiging, waardoor lekken worden voorkomen.
Ja, gebruik asBitmap() vóór load(). Glide laadt de GIF als een statische afbeelding en toont alleen het eerste frame. Dit is handig voor lijsten waar GIF-animatie ongewenst is vanwege prestaties.
De cache van Glide bestaat uit drie niveaus: actieve bronnen (momenteel in gebruik), RAM (LRU-cache) en schijf (LruCache). Afbeeldingen geladen uit de cache worden onmiddellijk weergegeven. De cache wordt automatisch gewist bij geheugentekort.
Aangepaste HTTP-client wordt geregistreerd via OkHttpUrlLoader in AppGlideModule. Overschrijf registerComponents en registreer uw eigen OkHttpClient. Dit maakt het mogelijk interceptors, certificaten en aangepaste time-outs toe te voegen.
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