Glide ist eine Bibliothek zum Laden von Bildern in Android, unterstützt von Google durch das Bumptech-Projekt. Die Bibliothek bietet effizientes Laden von Bildern, GIF-Animationen und Videoframes mit automatischer Speicherverwaltung. Laut dem Glide GitHub-Repository wird das Projekt von über 200.000 Anwendungen genutzt. Glide wird von Google als bevorzugte Bibliothek zum Laden von Grafiken in Android empfohlen.
Wichtige Punkte
Glide ist eine Bibliothek zum schnellen und effizienten Laden von Bildern, animierten GIFs und Videoframes in Android-Anwendungen. Das Projekt wird von Bumptech unter der Schirmherrschaft von Google entwickelt und in offiziellen Google-Anwendungen weit verbreitet eingesetzt.
Die interne Architektur von Glide basiert auf einem komponentenbasierten Ansatz: Die Engine verwaltet die Ausführung von Anfragen, DecodeJob ist für die Dekodierung zuständig und ResourceDecoder wandelt Rohdaten in Bitmap oder Drawable um. Jede Stufe kann über Module und Registries angepasst werden, was Glide zu einer äußerst flexiblen Bibliothek für nicht standardisierte Bildformate macht.
Im Gegensatz zu vielen Mitbewerbern wurde Glide von Anfang an mit Blick auf die Besonderheiten von Android entwickelt: Activity- und Fragment-Lebenszyklus, Bildschirmdrehungen, Konfigurationsänderungen. Die Bibliothek pausiert und setzt das Laden automatisch in Abhängigkeit vom Zustand der Komponente fort.
Laut Android Developers ist Glide die empfohlene Bibliothek zum Laden von Bildern in der offiziellen Google-Dokumentation. Sie wird in Google Play, Google Maps und anderen Produkten des Unternehmens verwendet, was ihre Zuverlässigkeit und Leistung bestätigt.
Der Hauptunterschied zwischen Glide und Alternativen ist die automatische Skalierung von Bildern auf die ImageView-Größe. Während Picasso das Bild in voller Auflösung lädt und dann skaliert, dekodiert Glide die Datei direkt in der benötigten Größe. Dies reduziert den Spitzenspeicherverbrauch und beschleunigt die Anzeige in Listen mit unterschiedlichen Zellgrößen.
Glide bietet eine breite Palette von Funktionen für die Arbeit mit Bildern, die sowohl einfache als auch komplexe Ladeszenarien abdecken.
GIF und animierte WebP werden von Glide genauso einfach geladen und angezeigt wie statische Bilder. Die Bibliothek erkennt das Format automatisch anhand des MIME-Typs und dekodiert die Animation, wobei Frames in einem Hintergrundthread angezeigt werden. Für die Wiedergabesteuerung stehen die Methoden asGif und asBitmap zur Verfügung.
Glide bindet sich automatisch an den Lebenszyklus von Activity, Fragment und View. Wenn eine Activity pausiert wird, wird das Laden ausgesetzt; wenn sie zerstört wird, wird es abgebrochen. Dies verhindert Speicherlecks und das Laden von Bildern für bereits geschlossene Bildschirme. Die Integration funktioniert über die LifecycleOwner-Unterstützung.
Glide kann Frames aus Videos per URL oder lokalem Pfad extrahieren. Die Methode asBitmap() in Kombination mit load() wird für Video-URIs verwendet. Glide wählt automatisch einen Keyframe oder einen Frame zu einem bestimmten Zeitstempel aus. Dies ist nützlich für die Anzeige von Video-Thumbnails.
GlideApp ist eine generierte Klasse, die eine erweiterte API basierend auf der AppGlideModule-Konfiguration bereitstellt. Sie ermöglicht die Verwendung von Methoden, die im standardmäßigen Glide.with nicht verfügbar sind: Laden mit benutzerdefinierten Standardoptionen, Integration mit Bibliotheken und voreingestellte Transformationen. Für die Generierung ist die Annotation @GlideModule in einer Klasse erforderlich, die AppGlideModule erweitert.
Glide verwendet eine mehrschichtige Architektur mit Engine, Decodern, Transformationen und Cache. Jede Anfrage durchläuft eine Kette von Handlern, die das Laden für eine bestimmte ImageView optimieren.
Wenn into(view) aufgerufen wird, überprüft Glide den Cache: aktive Ressourcen, Speichercache, Festplattencache und erst dann das Netzwerk. Das Bild wird automatisch unter Berücksichtigung der Bildschirmdichte und des scaleType auf die Ziel-ImageView-Größe skaliert. Dies reduziert die Speichernutzung — ein Hauptvorteil von Glide.
Glide.with(context)
.load("https://example.com/image.jpg")
.placeholder(R.drawable.loading)
.error(R.drawable.error)
.override(400, 300)
.centerCrop()
.into(imageView)
Die Installation von Glide erfolgt über Gradle. Die Bibliothek erfordert eine Konfiguration über AppGlideModule für die API-Generierung. Die minimale Android-API-Version ist 21.
Fügen Sie in der build.gradle Glide mit dem kapt-Annotationsprozessor für die GlideApp-API-Generierung hinzu. Für Kotlin verwenden Sie kapt anstelle von annotationProcessor. Glide Version 4.16+ funktioniert stabil mit Android Gradle Plugin 8.x.
dependencies {
implementation "com.github.bumptech.glide:glide:4.16.0"
annotationProcessor "com.github.bumptech.glide:compiler:4.16.0"
}
// Verwenden Sie kapt für Kotlin
// kapt "com.github.bumptech.glide:compiler:4.16.0"
AppGlideModule ist eine erforderliche Komponente für die Konfiguration von Glide. Es ermöglicht das Festlegen der Cache-Größe, benutzerdefinierter HttpStack und das Registrieren eigener Decoder. Das Modul wird von Glide beim Start der Anwendung gescannt. Die Annotation @GlideModule registriert es 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)
);
}
}
Die folgenden Beispiele zeigen typische Szenarien: Bildladung, Arbeit mit GIFs und Videoframe-Extraktion.
Das grundlegende Laden über Glide.with().load().into() — minimaler Code zum Anzeigen eines Bildes aus dem Netzwerk. Glide passt sich automatisch an die ImageView-Größe an. Der Platzhalter wird während des Ladevorgangs angezeigt und error bei einem Fehler.
Glide.with(fragment)
.load("https://example.com/photo.jpg")
.placeholder(R.drawable.placeholder)
.error(R.drawable.error)
.skipMemoryCache(true)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.into(imageView)
Ein GIF wird genauso geladen wie ein statisches Bild — Glide erkennt das Format automatisch anhand des Inhaltstyps. Für das erzwungene Laden als statisches Bild verwenden Sie asBitmap(); für GIF asGif(). Glide dekodiert effizient nur die sichtbaren Frames.
Glide.with(context)
.asGif()
.load("https://example.com/animation.gif")
.into(imageView)
// Das erste Frame eines GIF als statisches Bild laden
Glide.with(context)
.asBitmap()
.load("https://example.com/animation.gif")
.into(imageView)
Ein Videoframe wird von Glide aus einer lokalen oder entfernten Video-URI extrahiert. Standardmäßig lädt Glide den Keyframe. Um einen bestimmten Zeitstempel anzugeben, verwenden Sie frameMillis. Dies ist nützlich für die Anzeige von Vorschaubildern in einer Videogalerie.
String videoUrl = "https://example.com/video.mp4";
Glide.with(context)
.asBitmap()
.load(videoUrl)
.override(200, 200)
.into(imageView)
Die Optimierung von Glide für RecyclerView ist eine wichtige Fähigkeit bei der Entwicklung von Anwendungen mit vielen Bildern. Die richtige Konfiguration verhindert Verzögerungen und OOM-Fehler.
Eine der Hauptfunktionen von Glide ist die RecyclerView-Integration über RecyclerViewPreloader. Diese Komponente analysiert die Scrollgeschwindigkeit und -richtung und lädt Bilder vor, die in wenigen Elementen auf dem Bildschirm erscheinen werden. Um den Preloader zu verwenden, müssen Sie das PreloadSizeProvider-Interface implementieren und es zusammen mit der Ziel-ImageView an den Konstruktor übergeben.
Die Verwendung der override()-Methode mit genauen ImageView-Abmessungen beschleunigt das Laden erheblich. Wenn Glide die genaue Zielgröße kennt, kann es das Bild direkt in der erforderlichen Auflösung dekodieren und den Skalierungsschritt überspringen. Dies reduziert die Dekodierungszeit und den Spitzenspeicherverbrauch um 30–40%.
Für Feeds mit heterogenem Inhalt verwenden Sie unterschiedliche RequestOptions für jeden Elementtyp. Zum Beispiel können Sie für große Bannerbilder override(1200, 600) und RGB_565-Qualität einstellen, während Sie für Avatare override(200, 200) und Rundung via transform verwenden. Dieser Ansatz nutzt Ressourcen optimal für jeden Inhaltstyp.
Glide bietet flexible Optionen zur Fehlerbehandlung durch Fehlerbilder und benutzerdefinierte RequestListener. RequestListener ermöglicht es, auf erfolgreiches Laden oder Fehler zu reagieren — Fehler zu protokollieren oder Analysen zu senden. Sie können auch einen Fallback konfigurieren — ein Bild, das angezeigt wird, wenn load() null statt einer URL erhält.
Verwenden Sie RecyclerViewPreloader, um Bilder vorzuladen, bevor der Benutzer zu ihnen scrollt. Glide unterstützt die RecyclerView-Integration über einen Preloader, der die Scrollgeschwindigkeit analysiert und Bilder im Voraus lädt.
Die Thumbnail-Multiplikation ermöglicht es, zuerst eine verkleinerte Version des Bildes anzuzeigen und dann die Vollversion zu laden. Der Aufruf von thumbnail(0.25f) lädt eine Version mit 25% Größe, die sofort angezeigt wird, während das Bild in voller Größe später geladen wird. Dies erzeugt den Eindruck eines sofortigen Ladens.
Für Listenadapter verwenden Sie .override() mit genauen ImageView-Abmessungen, damit Glide das Bild nicht jedes Mal skalieren muss. Dies reduziert die CPU-Last und den Speicherverbrauch. Die Cache-Größe wird experimentell ermittelt, aber 250 MB für die Festplatte und 20% des verfügbaren Speichers sind ein guter Ausgangspunkt.
Häufig gestellte Fragen
Glide unterstützt GIFs, Videoframes und animierte WebP. Es verwaltet den Speicher effizienter und wird von Google empfohlen. Picasso ist kleiner und einfacher zu verwenden. Für komplexe Projekte wählen Sie Glide.
Glide akzeptiert einen LifecycleOwner (Fragment, Activity) oder View. Die Bibliothek verfolgt den Status automatisch über LifecycleObserver: pausiert das Laden bei Pause und bricht es bei Zerstörung ab, um Speicherlecks zu verhindern.
Ja, verwenden Sie asBitmap() vor load(). Glide lädt das GIF als statisches Bild und zeigt nur den ersten Frame an. Dies ist nützlich für Listen, in denen GIF-Animation aus Leistungsgründen unerwünscht ist.
Der Glide-Cache besteht aus drei Ebenen: aktive Ressourcen (aktuell in Verwendung), Arbeitsspeicher (LRU-Cache) und Festplatte (LruCache). Aus dem Cache geladene Bilder werden sofort angezeigt. Der Cache wird automatisch geleert, wenn der Speicher knapp wird.
Ein benutzerdefinierter HTTP-Client wird über OkHttpUrlLoader in AppGlideModule registriert. Überschreiben Sie registerComponents und registrieren Sie Ihren OkHttpClient. Dies ermöglicht das Hinzufügen von Interceptoren, Zertifikaten und benutzerdefinierten Timeouts.
Zusammenfassung
Wir entwickeln eine mobile Applikation schlüsselfertig
IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.
Lesen Sie auch