2017-09-18 3 views
0

Wenn meine Anwendung eine ListView zeigt und die ListView ListViewItem hat, die einige Teile von Informationen einschließlich Bildern zeigt, werden diese Bilder zwischengespeichert?Android Drawable Image Caching

Mit anderen Worten, wenn mein ListView 1000 Elemente zeigt und jedes Element ein Bild in einem Layout wie unten hat und das Bild sich in meinen Ressourcen befindet, wird das Bild 1000 Mal geladen (und daher 1000 x verbrauchen image_size des Speichers) oder wird es nur einmal für alle 1000 Bilder zwischengespeichert und geladen (und daher nur 1 x image_size des Speichers verbrauchen)?

+--------------------------------------------------+ 
|   |    TEXT      |    
| IMAGE |--------------------------------------| 
|   |    TEXT   | TEXT | 
+--------------------------------------------------+ 

Antwort

1

Wenn meine Anwendung ein Listview zeigt und die Listview hat ListViewItem, die paar Stücke von Informationen, einschließlich der Bilder zeigt, werden diese Bilder zwischengespeichert?

Jedes Mal, wenn Sie ein Bild laden und es in einem Artikel angezeigt werden (das Element sichtbar sein soll), wird es 1 x image_size Speicher verbrauchen, wenn Sie in Bildschirm 10 Artikel angezeigt werden, wird es 10 x image_size Speicher verbrauchen, aber wenn Sie haben 1000 Artikel angezeigt, das ist ein anderer Fall. Wenn Sie nur dieses Bild anzeigen und keine ImageLoader Logik verwenden, wird viel Speicher ausgelastet und als Ergebnis OOM.

Sie sollten eigene ImageLoader Logik schreiben, oder verwenden Sie einfach Bibliotheken, die schon seit einiger Zeit, die dies fast perfektioniert haben.

Viele häufigen Fehler von Bild Laden auf Android wird automatisch von Picasso behandelt:

  • Handhabung Image Recycling und Download-Abbruch in einem Adapter zum Beispiel Sie Picasso nutzen könnten.

  • Komplexe Bildtransformationen mit minimalem Speicherbedarf.

  • Automatisches Speichern und Zwischenspeichern von Datenträgern.

Da es sich um eine Java-lib ist, können Sie Binding Library verwenden es in Xamarin zu verwenden.

+0

Danke @YorkShen – pixel

+0

Sie könnten auch FFImageLoading verwenden, das für Xamarin entworfen wurde. –