2013-10-16 4 views
5

Ich bin neu, um auf Volley und auf Caching zu arbeiten: P. Obwohl ich bereits eine Reihe von Artikeln & Beiträge zu Image Caching mit Volley durchlaufen habe, bin ich immer noch nicht klar mit der besten/bevorzugten Weg für Bild Caching mit Volley. Wie Festplatten-Caching oder Speicher? Welche Unterstützung bietet Volley bereits und wie (in Bezug auf L1- und L2-Caching-Unterstützung)? Ich verwende NetworkImageView in meinem Fall, um eine Listenansicht mit Bildern zu füllen, die aus dem Netz geholt werden. Vielen Dank im Voraus!Volley: Image Caching

+0

Ich bin auch darüber verwirrt: http://StackOverflow.com/A/16897129/2885233, wo es gesagt wird, dass 'Volley implizit Disk-basierten Cache in seinem eigenen L2-Cache behandelt. Der Image-Cache ist nur der L1-Cache ' – arorak

Antwort

14

Für die Bildzwischenspeicherung erwartet Volley eine Implementierung Speichercache für Bilder. Dieser Cache wird während der Betriebszeit der App für schnellere Ladezeiten mit dem Speicher verwendet.

nicht speziell auf Bilder bezogen, hat Volley seine eigene Disk-Cache, die sie verwendet jeder Antwort zwischenzuspeichern es wird, mit der Standard-Strategie von Caching nach Cache-Header der HTTP-Antwort.

Wenn die Bilder, die Sie in Ihre App laden, Cache-Header haben, werden sie entsprechend auf der Festplatte zwischengespeichert, sonst nicht.

Wenn Sie mit dieser Strategie unzufrieden sind und zwingen wollen, die Platte zu cachen, müssen Sie einen kleinen Code bearbeiten/hinzufügen, der die Cache-Strategie ändert. Es gibt viele Möglichkeiten, dies zu erreichen. Eine davon ist die Bereitstellung einer eigenen Implementierung zum Parsen der HTTP-Header. Werfen Sie einen Blick auf HttpHeaderParser in der Quelle Volley.

+0

Danke Itai! Wie du gesagt hast, bin ich mir nicht sicher, ob die Bilder, die ich bin oder ein Benutzer (der dies benutzt), Cache-Header haben oder nicht. Also versuche ich nur ** Disk-Caching ** zu machen und dafür habe ich auf https://github.com/JakeWharton/DiskLruCache hingewiesen, aber ich nutze nicht, ob das ein guter Weg ist oder irgendein anderer Ansatz besser sein könnte . Ich bin auch nicht klar, ob ich [DiskBasedCache] (http://files.evancharlton.com/volley-docs/) von Volley hier – arorak

+1

verwenden kann Achtung: Sie wollen * nicht * einen Festplatten-Cache verwenden, wo ein Speicher Cache wird im 'ImageLoader'-Konstruktor erwartet. Wenn Sie Caching erzwingen wollen, müssen Sie genau das tun - bearbeiten Sie den Volley-Quellcode, um entweder jeden HTTP-Header zu analysieren, so wie er einen Cache-Header hatte, oder ändern Sie die Überprüfung auf Einträge im Cache. Auch, wenn meine Antwort helfen würde, würde ich es begrüßen, wenn Sie es akzeptieren, danke. –

+0

Ok. Eigentlich war mir nicht bewusst, dass ein Speicher-Cache in ImageLoader erwartet wird. Ich verpasste den Verweis, der besagt, dass der übergebene Cache "Der Cache, der als L1-Cache verwendet werden soll" sein sollte. Und L1 wäre natürlich eine Erinnerung (korrigiere mich wenn ich falsch liege ;-)). – arorak