Picasso ist eine Bibliothek zum Laden von Bildern in Android-Anwendungen, entwickelt von Square. Die Bibliothek bietet eine einfache und ausdrucksstarke API zum Laden, Cachen und Anzeigen von Grafiken aus dem Netzwerk. Laut den Picasso-GitHub-Statistiken wurde die Bibliothek mehr als 100.000 Mal heruntergeladen. Picasso verwaltet automatisch den Speicher und speichert Bilder auf mehreren Ebenen zwischen.
Wichtige Punkte
Picasso ist eine Bibliothek zum asynchronen Laden von Bildern in Android, erstellt von Square. Sie wurde nach dem Künstler Pablo Picasso benannt und spiegelt die Philosophie der Bibliothek wider: eine komplexe Aufgabe in eine einfache und elegante API zu verwandeln. Es ist die beliebteste Bibliothek zum Laden von Bildern in der Android-Community.
Die Architektur von Picasso ist minimalistisch: Die Bibliothek verwendet einen Thread-Pool zum Laden, LruCache für den Arbeitsspeicher-Cache und DiskLruCache für den Disk-Cache. Im Gegensatz zu Glide benötigt Picasso keine AppGlideModule-Konfiguration und ist sofort nach Hinzufügen der Abhängigkeit einsatzbereit. Das macht es zur idealen Wahl für Prototypen und kleine Projekte.
Picasso 2.8 ist die neueste stabile Version, kompatibel mit Android API 21+ und Java 8+. Die Bibliothek benötigt keine Konfiguration von Gradle-Plugins oder Annotationen, was die Migration zwischen Versionen vereinfacht und die Wahrscheinlichkeit von Fehlern bei Updates reduziert. Trotz seiner langen Geschichte ist Picasso weiterhin in tausenden Projekten weltweit gefragt.
Die Hauptaufgabe von Picasso ist es, ein Bild per URL zu laden, zu dekodieren, bei Bedarf die Größe zu ändern und in einem ImageView anzuzeigen. Die Bibliothek verwaltet automatisch Hintergrund-Threads, Cache und die Wiederverwendung von ImageView in Listen.
Seit seiner Veröffentlichung im Jahr 2013 ist Picasso zum Standard für das Laden von Bildern in der Android-Community geworden. Die Bibliothek wird in tausenden Anwendungen verwendet, dank ihrer minimalen Einstiegshürde — für die erste Verwendung reicht eine einzige Codezeile.
Prioritäten in Picasso ermöglichen die Verwaltung der Ladereihenfolge von Bildern. Standardmäßig haben alle Anfragen normale Priorität, aber für kritische Bilder kann eine hohe Priorität über die Methode priority gesetzt werden. Wenn ein ImageView wiederverwendet wird (z.B. in RecyclerView), bricht Picasso automatisch die vorherige Anfrage ab und startet eine neue, um Bildflimmern beim Scrollen zu verhindern.
Picasso bietet eine Reihe von Funktionen, die die wichtigsten Szenarien der Bildbearbeitung in mobilen Anwendungen ohne unnötige Komplexität abdecken.
Der Cache von Picasso besteht aus zwei Ebenen: RAM für schnellen Zugriff und Disk zur dauerhaften Speicherung. Bei der Anfrage eines Bildes überprüft die Bibliothek zunächst den Arbeitsspeicher-Cache, dann die Disk und erst danach führt sie eine Netzwerkanfrage durch. Dies beschleunigt die Anzeige wiederholt geladener Bilder erheblich.
Transformationen ermöglichen das Ändern der Größe, Zuschneiden oder Drehen eines Bildes, ohne das Original jedes Mal zu dekodieren. Picasso bietet integrierte Transformationen CenterCrop und CenterInside und ermöglicht auch die Erstellung benutzerdefinierter Transformationen über das Transformation-Interface. Transformierte Bilder werden separat zwischengespeichert.
Der Placeholder wird während des Ladens des Bildes aus dem Netzwerk angezeigt und gibt dem Benutzer visuelles Feedback. Ein Fehlerbild wird angezeigt, wenn das Laden fehlschlägt. Picasso unterstützt auch ein Bild, das angezeigt wird, bis eine neue Version geladen ist, was für aktualisierbare Avatare nützlich ist.
Picasso unterstützt das Laden von Bildern aus URLs, Ressourcen, Dateien, Content Providern und URIs. Die Methode load() ist für alle diese Typen überladen, und die Bibliothek ermittelt automatisch die Quelle. Für Ressourcen und Dateien führt Picasso keine Netzwerkanfrage durch, sondern lädt die Daten direkt, was die Anzeige integrierter Grafiken beschleunigt.
Picasso verwendet eine Architektur, die auf RequestCreator und Dispatcher basiert. Jede Anfrage wird über Picasso.get().load() erstellt und in einem Thread-Pool ausgeführt. Der Dispatcher verwaltet die Anfragewarteschlange, Prioritäten und den Abbruch bei Wiederverwendung eines ImageView.
Beim Aufruf von into(view) erstellt Picasso ein Action-Objekt, das URL, Transformationen, Ziel und Callback enthält. Die Action wird in die Dispatcher-Warteschlange eingereiht. Die Engine lädt das Bild über den Downloader (standardmäßig OkHttp), dekodiert das Bitmap, wendet Transformationen an und liefert das Ergebnis an den UI-Thread. Alle Bilder werden automatisch an die ImageView-Größe angepasst.
Picasso.get()
.load("https://example.com/image.jpg")
.placeholder(R.drawable.placeholder)
.error(R.drawable.error)
.resize(400, 300)
.centerCrop()
.into(imageView)
Die Installation von Picasso erfolgt über Gradle. Die Bibliothek wird über Maven Central vertrieben und erfordert keine komplexe Konfiguration. Die Mindestversion der Android-API ist 21.
Fügen Sie in der modulbezogenen Datei build.gradle implementation ‘com.squareup.picasso:picasso:2.8’ hinzu. Nach der Gradle-Synchronisation ist Picasso einsatzbereit. Für Netzwerkoperationen verwendet Picasso automatisch OkHttp, wenn es im Projekt vorhanden ist, oder die integrierte HttpURLConnection.
dependencies {
implementation "com.squareup.picasso:picasso:2.8"
}
// Kafka zum Laden aus OkHttp (optional)
implementation "com.squareup.okhttp3:okhttp:4.12.0"
Der Debug-Indikator von Picasso zeigt ein farbiges Dreieck in der Ecke jedes Bildes: rot für Netzwerkladen, blau für Disk-Cache, grün für Arbeitsspeicher-Cache. Aktiviert wird er durch Aufruf von setIndicatorsEnabled(true) auf der Picasso-Instanz. Die Standard-Cache-Größe beträgt 15% des verfügbaren Arbeitsspeichers des Geräts.
Zur Konfiguration einer benutzerdefinierten Picasso-Instanz verwenden Sie Picasso.Builder. Damit können Sie einen Executor für Hintergrund-Threads, einen Downloader für Netzwerkanfragen, MemoryCache und DiskCache festlegen. Eine benutzerdefinierte Instanz ist besonders in Tests nützlich, wo der Downloader durch einen Stub ersetzt werden kann, der ein Bild ohne Netzwerkanfrage zurückgibt.
Die folgenden Beispiele zeigen typische Szenarien für die Arbeit mit Picasso: Laden eines einfachen Bildes, Verwendung von Transformationen und Laden in RecyclerView.
Das einfache Laden in ein ImageView erfolgt mit einem einzigen Aufruf. Picasso passt das Bild automatisch an die Maße der Ansicht unter Berücksichtigung von scaleType an. Ein Placeholder wird angezeigt, bis der Ladevorgang abgeschlossen ist, und ein Fehlerbild wird bei einem Verbindungsfehler angezeigt.
Picasso.get()
.load("https://example.com/photo.jpg")
.placeholder(R.drawable.loading)
.error(R.drawable.broken_image)
.fit()
.centerCrop()
.into(imageView)
BlurTransformation verwischt das Bild mit einem bestimmten Radius. Benutzerdefinierte Transformationen implementieren das Transformation-Interface mit der Methode transform. Der Cache speichert das Transformationsergebnis unter einem eindeutigen Schlüssel, um eine erneute Anwendung zu vermeiden.
public class BlurTransformation implements Transformation {
@Override
public Bitmap transform(Bitmap source) {
Bitmap blurred = Bitmap.createBitmap(source);
RenderScript rs = RenderScript.create(context);
// Anwendung von Unschärfe
source.recycle();
return blurred;
}
@Override
public String key() {
return "blur";
}
}
In RecyclerView bricht Picasso automatisch Anfragen für ImageViews ab, die aus dem Bildschirm gescrollt wurden, und verwendet bereits geladene Bilder wieder. Dies verhindert Speicherlecks und gewährleistet ein flüssiges Scrollen.
public void onBindViewHolder(ViewHolder holder, int position) {
String url = items.get(position).getImageUrl();
Picasso.get()
.load(url)
.fit()
.centerCrop()
.into(holder.imageView);
}
Der Vergleich von Picasso und Glide ist eine häufige Frage bei der Wahl einer Bildladebibliothek für Android. Beide Bibliotheken lösen die gleiche Aufgabe, haben aber unterschiedliche Prioritäten und Nutzungseigenschaften.
Picasso ist besser geeignet für Projekte, bei denen Einfachheit und minimale APK-Größe wichtig sind. Glide wird gewählt, wenn GIF-Unterstützung, Videoframes und maximale Speicheroptimierung benötigt werden. Glide skaliert das Bild automatisch auf die genaue ImageView-Größe, was den Speicherverbrauch in einigen Szenarien um bis zu 50% im Vergleich zu Picasso reduziert.
In Leistungstests zeigt Glide bessere Ergebnisse bei der Arbeit mit RecyclerView dank seines Vorlademechanismus und des automatischen Anfrageabbruchs beim schnellen Scrollen. Picasso verwendet eine einfachere Strategie, was es vorhersagbar, aber bei großen Datenmengen weniger effizient macht.
Picasso konzentriert sich auf API-Einfachheit und minimale Größe. Glide bietet eine breitere Funktionalität: Unterstützung für GIFs, animierte Bilder, Videoframes und Lebenszyklus-Integration. Glide verwaltet auch den Speicher effizienter dank automatischer Skalierung auf ImageView-Größe.
| Kriterium | Picasso | Glide |
|---|---|---|
| Bibliotheksgröße | ~120 KB | ~500 KB |
| GIF-Unterstützung | Nein | Ja |
| Videoframes | Nein | Ja |
| Entwickler | Square | Google (Bumptech) |
| API | Fluent-Kette | RequestBuilder |
Laut Android Developer Relations wird Glide von Google als bevorzugte Bibliothek für das Laden von Bildern in neuen Projekten empfohlen. Picasso bleibt eine ausgezeichnete Wahl für einfache Projekte, bei denen keine GIFs und Videoframes benötigt werden.
Häufig gestellte Fragen
Picasso ist kleiner und einfacher zu bedienen. Glide unterstützt GIFs und Videoframes, verwaltet den Speicher effizienter und wird von Google empfohlen. Die Wahl hängt vom Bedarf des Projekts an zusätzlichen Formaten ab.
Zum Löschen des Picasso-Caches verwenden Sie die Methode Picasso.get().invalidate(url) für ein einzelnes Bild oder shutdown() für eine vollständige Löschung. Der Disk-Cache wird bei einer Neuinstallation der App oder über die Systemeinstellungen gelöscht.
Picasso ist nicht von der Bildschirmrotation abhängig. Geladene Bilder werden im Cache gespeichert und bei der Neuerstellung der Activity daraus angezeigt. Zur Beschleunigung verwenden Sie ViewModel in Kombination mit Picasso, um geladene Daten zu erhalten.
Ja, Picasso ist vollständig kompatibel mit Kotlin. Kotlin-Entwickler können Erweiterungsfunktionen für eine prägnantere Syntax verwenden oder die Bibliothek koptional zur Behandlung von Null-Werten beim Laden von Bildern einsetzen.
Picasso verwendet LruCache für den Arbeitsspeicher-Cache und räumt automatisch ungenutzte Bilder auf. Die Standard-Cache-Größe beträgt 15% des verfügbaren Arbeitsspeichers der App. Bei Speichermangel gibt Picasso Ressourcen über onTrimMemory frei.
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