Ich möchte meine Erfahrungen mit diesen 3 Bibliotheken teilen: UIL, Picasso und Volley. Ich habe früher UIL verwendet, bin dann aber zu dem Schluss gekommen, dass ich es nicht wirklich empfehlen kann, und ich würde vorschlagen, stattdessen Volley oder Picasso zu verwenden, die beide von hochtalentierten Teams entwickelt wurden. UIL ist überhaupt nicht schlecht, aber es fehlt die Liebe zum Detail der beiden anderen Bibliotheken.
Ich fand UIL weniger gut mit der UI-Leistung; Es neigt dazu, den UI-Thread mehr als Volley oder Picasso zu blockieren. Dies kann teilweise auf die Tatsache zurückzuführen sein, dass UIL das Stapeln der Bildantworten nicht unterstützt, während Picasso und Volley dies standardmäßig tun.
Außerdem hat mir das Disk-Cache-System von UIL nicht gefallen. Obwohl Sie zwischen verschiedenen Implementierungen wählen können, muss ich darauf hinweisen, dass es derzeit keine Möglichkeit gibt, den UIL-Festplatten-Cache sowohl nach Gesamtgröße als auch nach Ablaufzeit der Entität zu begrenzen . Volley und Picasso tun dies und verwenden standardmäßig die vom Server zurückgegebene Ablaufzeit, während UIL sie ignoriert.
Schließlich können Sie mit UIL eine globale Image Loader-Konfiguration festlegen, die die ausgewählten Implementierungen und Einstellungen für den Festplatten-Cache und den Speicher-Cache sowie weitere Details enthält. Diese Konfiguration wird jedoch überall in Ihrer App angewendet. Wenn Sie also mehr Flexibilität wie zwei separate Festplatten-Caches benötigen, ist UIL kein Problem. Mit Volley hingegen können Sie so viele separate Bildlader verwenden, wie Sie möchten, jeder mit seiner eigenen Konfiguration. Picasso verwendet standardmäßig eine globale Instanz, ermöglicht Ihnen jedoch auch das Erstellen separat konfigurierbarer Instanzen.
Um es zusammenzufassen: Picasso hat die beste API, verwendet jedoch den globalen HTTP-Festplatten-Cache, der von allen HttpURLConnection
Instanzen gemeinsam genutzt wird, was in einigen Fällen zu restriktiv sein kann. Volley bietet die beste Leistung und Modularität, ist jedoch weniger benutzerfreundlich und erfordert, dass Sie ein oder zwei eigene Module schreiben, damit es wie gewünscht funktioniert. Insgesamt würde ich beide gegen UIL empfehlen.
Bearbeiten (18. Dezember 2014): Die Dinge haben sich geändert, seit ich diese erste Antwort geschrieben habe und ich dachte, dass es notwendig ist, sie zu verbessern:
Picasso 2.4 ist noch konfigurierbarer als ältere Versionen. Wenn es mit OkHttp verwendet wird (was sehr zu empfehlen ist), kann es auch einen separaten Festplatten-Cache für jede Instanz verwenden, sodass Sie wirklich keine Einschränkungen haben. Noch wichtiger ist, dass ich festgestellt habe, dass sich die Leistung von Picasso und OkHttp stark verbessert hat und meiner Meinung nach jetzt die schnellste Image Loader-Lösung für Android ist. Bitte beachten Sie, dass ich in meinem Code immer .fit()
in Kombination mit .centerCrop()
oder .centerInside()
zur Verringerung der Speichernutzung verwende und Bitmap-Größenänderungen im UI-Thread vermeide. Picasso wird aktiv entwickelt und unterstützt und das ist sicherlich ein großes Plus.
Volley hat sich nicht so sehr verändert, aber ich habe in der Zwischenzeit zwei Probleme damit bemerkt:
- Manchmal werden einige Images unter hoher Last aufgrund einer Beschädigung des Festplatten-Cache nicht mehr geladen.
- In einer NetworkImageView angezeigte Miniaturansichten (deren Skalierungstyp auf centerCrop festgelegt ist) sind im Vergleich zu den anderen Bibliotheken ziemlich verschwommen.
Aus diesen Gründen habe ich beschlossen, Volley nicht mehr zu verwenden.
UIL ist immer noch langsam (insbesondere der Festplatten-Cache) und seine API ändert sich häufig.
Ich habe auch diese neue Bibliothek namens Glide 3 getestet, die behauptet, mit einer Picasso-ähnlichen API optimierter zu sein als Picasso. Nach meiner persönlichen Erfahrung ist es bei Netzwerkanforderungen unter hoher Last tatsächlich langsamer als Picasso und Volley, selbst wenn es in Kombination mit OkHttp verwendet wird. Schlimmer noch, es hat einige Abstürze mit meinen Apps unter Lollipop verursacht, als ich eine Aktivität verlassen habe. Es hat noch 2 Vorteile gegenüber seinen Konkurrenten:
- Es unterstützt die Dekodierung von animierten GIFs
- Die endgültigen verkleinerten Bitmaps werden im Festplatten-Cache abgelegt, was bedeutet, dass das Zurücklesen aus dem Festplatten-Cache extrem schnell ist.
Fazit: Ich empfehle jetzt die Verwendung von Picasso + OkHttp, da es die beste Flexibilität, API, Leistung und Stabilität in Kombination bietet. Wenn Sie GIF-Unterstützung benötigen, können Sie auch Glide in Betracht ziehen.