Volley Image Caching

Ich versuche, Volleys Image-Caching zu verstehen. Ich habe ein Fragment mit Gridview drin, das rund 12-30 Bilder laden wird. Dort werden Bilder vom Server abgerufen und ich benutze NetworkImageView zum Laden dieser Bilder.

Ich kann die Bilder im NetworkImageView anzeigen und alles funktioniert gut. Aber wenn ich von einem fragment zum anderen wechsle und in das vorherige Fragment LogCat , sehe ich in LogCat , dass Volley versucht, die Bilder wieder zu holen.

  • Android "Single Top" Launch Mode und onNewIntent Methode
  • Vermeidung der "Keine EGLConfig gefunden!" Fehler
  • Konnte RemoteViews: MediaSessionCompat und NotificationCompat.MediaStyle auf HUAWEI-Geräten nicht erweitern
  • So fügen Sie zusätzlichen Platz innerhalb der Unterseite eines GridView hinzu
  • Streaming Stimme zwischen Android Phones über WiFi
  • Android - Deaktivieren Sie die Geräte-Zurück-Taste
  • Ich lese Volley automatisch kümmert sich um Image Caching. Wenn das Bild im ersten fragment , warum versucht es, das Bild wieder zu bekommen, als ich von der zweiten zur ersten zurückkam? An erster Stelle sind die LogCat Daten, die Volleys LogCat ? oder etwas anderes…

    Unten ist mein Code:

    In onCreate ()

     queue = Volley.newRequestQueue(getActivity()); imageLoader = new ImageLoader(queue, new ImageLoader.ImageCache() { private final LruCache<String, Bitmap> mCache = new LruCache<String, Bitmap>( 10); public void putBitmap(String url, Bitmap bitmap) { mCache.put(url, bitmap); } public Bitmap getBitmap(String url) { return mCache.get(url); } }); 

    Logcat beim Laden des Fragments zum ersten Mal:

     02-18 14:21:20.724: D/Volley(14713): [4944] BasicNetwork.logSlowRequests: HTTP response for request=<[ ] http://xx.files.wordpress.com/2014/02/screen-shot-2014-02-17-at-11-57-29-pm.png 0x800c5bdc LOW 2> [lifetime=3782], [size=398563], [rc=200], [retryCount=0] 02-18 14:21:20.874: D/Volley(14713): [4943] BasicNetwork.logSlowRequests: HTTP response for request=<[ ] http://xx.files.wordpress.com/2014/02/st-vincent.jpg 0x800c5bdc LOW 3> [lifetime=3941], [size=501475], [rc=200], [retryCount=0] 02-18 14:21:20.894: D/Volley(14713): [1] Request.finish: 4181 ms: [ ] http://xx.files.wordpress.com/2014/02/screen-shot-2014-02-17-at-11-57-29-pm.png 0x800c5bdc LOW 2 02-18 14:21:20.974: D/Volley(14713): [1] Request.finish: 4260 ms: [ ] http://xx.files.wordpress.com/2014/02/st-vincent.jpg 0x800c5bdc LOW 3 02-18 14:21:20.994: D/dalvikvm(14713): GC_FOR_ALLOC freed 1914K, 6% free 68371K/72184K, paused 11ms, total 11ms 02-18 14:21:20.994: I/dalvikvm-heap(14713): Grow heap (frag case) to 72.368MB for 5843106-byte allocation 02-18 14:21:21.014: D/dalvikvm(14713): GC_FOR_ALLOC freed 1K, 5% free 74076K/77892K, paused 15ms, total 15ms 02-18 14:21:21.074: D/Volley(14713): [1] Request.finish: 4336 ms: [ ] http://xx.files.wordpress.com/2014/02/underwater.gif 0x800c5bdc LOW 8 02-18 14:21:21.214: D/Volley(14713): [4945] BasicNetwork.logSlowRequests: HTTP response for request=<[ ] http://xx.files.wordpress.com/2014/02/screen-shot-2014-02-17-at-4-24-04-pm.png 0x800c5bdc LOW 5> [lifetime=4155], [size=482380], [rc=200], [retryCount=0] 02-18 14:21:21.244: D/Volley(14713): [1] Request.finish: 4494 ms: [ ] http://xx.files.wordpress.com/2014/01/albarn-everyday-robots.jpg 0x800c5bdc LOW 9 02-18 14:21:21.274: D/Volley(14713): [1] Request.finish: 4551 ms: [ ] http://xx.files.wordpress.com/2014/02/screen-shot-2014-02-17-at-4-24-04-pm.png 0x800c5bdc LOW 5 02-18 14:21:21.994: D/Volley(14713): [1] Request.finish: 5244 ms: [ ] http://xx.files.wordpress.com/2014/02/macdemarco_baby.jpg 0x800c5bdc LOW 10 02-18 14:21:22.934: D/Volley(14713): [1] Request.finish: 6183 ms: [ ] http://xx.files.wordpress.com/2014/01/nenehcherry_lank01.jpg 0x800c5bdc LOW 11 

    Wenn ich zum zweiten Mal wieder zum selben Fragment zurückkomme, habe ich gerade das zweite Fragment besucht und kam zum ersten Fragment zurück – nicht viel Lücke dazwischen.

     02-18 14:27:46.164: D/dalvikvm(14713): GC_FOR_ALLOC freed 29047K, 26% free 91776K/122752K, paused 23ms, total 23ms 02-18 14:27:47.994: D/dalvikvm(14713): GC_FOR_ALLOC freed 2957K, 21% free 97010K/122752K, paused 20ms, total 20ms 02-18 14:27:48.274: D/Volley(14713): [1] Request.finish: 3244 ms: [ ] http://xx.files.wordpress.com/2014/02/screen-shot-2014-02-17-at-2-58-16-pm.png 0x800c5bdc LOW 6 02-18 14:27:48.294: D/dalvikvm(14713): GC_FOR_ALLOC freed 2007K, 21% free 97932K/122752K, paused 14ms, total 14ms 02-18 14:27:48.324: D/Volley(14713): [4956] BasicNetwork.logSlowRequests: HTTP response for request=<[ ] http://xx.files.wordpress.com/2014/02/screen-shot-2014-02-17-at-11-57-29-pm.png 0x800c5bdc LOW 2> [lifetime=3272], [size=398563], [rc=200], [retryCount=0] 02-18 14:27:48.484: D/Volley(14713): [1] Request.finish: 3456 ms: [ ] http://xx.files.wordpress.com/2014/02/screen-shot-2014-02-17-at-11-57-29-pm.png 0x800c5bdc LOW 2 02-18 14:27:48.974: D/dalvikvm(14713): GC_FOR_ALLOC freed 1030K, 15% free 104815K/122752K, paused 56ms, total 56ms 02-18 14:27:49.054: D/Volley(14713): [1] Request.finish: 4022 ms: [ ] http://xx.files.wordpress.com/2014/02/screen-shot-2014-02-17-at-4-24-04-pm.png 0x800c5bdc LOW 5 02-18 14:27:49.314: D/Volley(14713): [1] Request.finish: 4276 ms: [ ] http://xx.files.wordpress.com/2014/01/albarn-everyday-robots.jpg 0x800c5bdc LOW 9 02-18 14:27:49.374: D/Volley(14713): [1] Request.finish: 4325 ms: [ ] http://xx.files.wordpress.com/2014/01/nenehcherry_lank01.jpg 0x800c5bdc LOW 11 02-18 14:27:49.404: D/Volley(14713): [1] Request.finish: 4355 ms: [ ] http://xx.files.wordpress.com/2014/02/macdemarco_baby.jpg 0x800c5bdc LOW 10 02-18 14:27:49.654: D/dalvikvm(14713): GC_FOR_ALLOC freed 1456K, 12% free 108705K/122752K, paused 27ms, total 27ms 02-18 14:27:49.734: D/Volley(14713): [1] Request.finish: 4691 ms: [ ] http://xx.files.wordpress.com/2014/02/underwater.gif 0x800c5bdc LOW 8 02-18 14:27:50.304: D/dalvikvm(14713): GC_FOR_ALLOC freed 11584K, 16% free 103314K/122752K, paused 47ms, total 47ms 02-18 14:27:50.334: D/Volley(14713): [1] Request.finish: 5281 ms: [ ] http://xx.files.wordpress.com/2014/02/echo-and-the-bunnymen.jpg 0x800c5bdc LOW 12 

    Wie die Links zeigen, greift Volley auf die gleichen URLs zu. Ist Volley versucht, Bilder vom Server zu bekommen? Oder ist es nur zeigt die URLs, die es aus dem Cache geladen wird?

    Wie mache ich Volley-Cache-Bilder? Wenn es jetzt nicht mit dem Caching umgeht, mit meinem Code oben, was soll ich tun, um es zu erreichen?

    Ich habe versucht, den maxSize Wert von 10 auf 100*1024*1024 (100MB) aber das hörte nicht von Volley auf, die die gleichen Werte 100*1024*1024 (100MB) .

  • Android Google Map API V2 Blank Screen
  • Crashlytics / Fabric berichtet nicht auf Android
  • Wie man Textkerning in Android TextView anpasst?
  • Usb tether und debug zur gleichen Zeit
  • Android-Dialer-Anwendung
  • Android: In-App-Kauf gibt 3 Fehlercode (Artikel bereits besessen) immer
  • 5 Solutions collect form web for “Volley Image Caching”

    Volley gab keine Caching-Option direkt. Du musst deine eigenen mit dem Werkzeug von Volley machen. Siehe Network Image Caching , hatte Jake Wharton über Caching-Mechanismus mit Volley geschrieben. Jake Whartons Volley-Anpassung

    Sie können in der folgenden Link sehen, die Fortsetzung meiner Frage zur Implementierung von Image Caching mit Volley mit Jake Whartons DiskLruCache und VolleyImageCacheExample. Es funktioniert wie erwartet und Bilder werden zwischengespeichert. Danke für deine Hilfe.

    JakeWhartons DiskLruCache – Wie man mit Volley implementiert?

    Verwenden Sie Volley als Singleton? Wenn du nicht bist, und du benutzt keinen gemeinsamen Kontext für die requestQueue, es wird nicht so funktionieren wie du es erwartet hast. Die Dokumentation zu diesem Teil der Volley ist besonders wenig hilfreich (zumindest seit ich es zuletzt verwendet habe). Sobald es richtig konfiguriert ist, liest / schreibt man aus dem Cache, wie man es erwarten würde.

    Hier ist ein GitHub-Projekt mit einer VolleySingleton-Klasse, die man zusammen mit Beispielen verwenden kann: CypressNorth / Volley-Singleton

    Hier ist ein Blog-Post, der das Setup detaillierter beschreibt: Einrichten des Android-Google Volley ImageLoader für NetworkImageView

    Betrachten Sie die Verwendung von Glide, die Android empfiehlt, Bilder in Ihrer App zu laden. Im Vergleich zu Volley, bietet Glide automatische Bild-Caching.

    So fügen Sie Glide in Ihre App hinzu:

    Schritt 1) ​​Update build.gradle Datei

     dependencies { compile 'com.github.bumptech.glide:glide:3.6.1' compile 'com.android.support:support-v4:19.1.0' } 

    Schritt 2) Add INTERNET Berechtigung in Manifest-Datei

     <uses-permission android:name="android.permission.INTERNET" /> 

    Schritt 3) Füge ImageView in deinem Layout hinzu

     <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/imageView" > </ImageView> 

    Schritt 4) Gleiten Verwendung in Aktivität

      //Initialize ImageView ImageView imageView = (ImageView) findViewById(R.id.imageView); //Loading image from below url into imageView Glide.with(this) .load("IMAGE URL HERE") .placeholder(R.drawable.placeholder) .error(R.drawable.imagenotfound) .override(200, 200); .centerCrop(); .into(imageView); 

    Lesen Sie mehr auf Android Glide Library

    Sie können dies überprüfen, hatte ich L1 und L2 Caching-Mechanismus für Volley aktiviert.

    Volley mit Caching Bitte stellen Sie sicher, dass die Cache-Steuerung im Antwort-Header aktiviert werden soll.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.