144 Stimmen

Android Bild-Caching

Wie kann ich Bilder in den Cache stellen, nachdem sie aus dem Internet heruntergeladen wurden?

3voto

ZamPrano Punkte 63

Was tatsächlich funktionierte für mich war die Einstellung ResponseCache auf meine Main-Klasse:

try {
   File httpCacheDir = new File(getApplicationContext().getCacheDir(), "http");
   long httpCacheSize = 10 * 1024 * 1024; // 10 MiB
   HttpResponseCache.install(httpCacheDir, httpCacheSize);
} catch (IOException e) { } 

y

connection.setUseCaches(true);

beim Herunterladen von Bitmaps.

http://practicaldroid.blogspot.com/2013/01/utilizing-http-response-cache.html

3voto

onosendai Punkte 28070

Erwägen Sie die Verwendung von Universal Image Loader Bibliothek por Sergej Tarasewitsch . Es kommt mit:

  • Laden von Bildern mit mehreren Threads. Sie können die Größe des Thread-Pools festlegen
  • Bildzwischenspeicherung im Speicher, im Dateisystem des Geräts und auf der SD-Karte.
  • Möglichkeit, den Ladefortschritt und die Ladeereignisse abzuhören

Universal Image Loader ermöglicht detaillierte Cache-Verwaltung für heruntergeladene Bilder, mit den folgenden Cache-Konfigurationen:

  • UsingFreqLimitedMemoryCache : Die am wenigsten häufig Das verwendete Bitmap wird gelöscht, wenn das Limit für die Cachegröße überschritten wird.
  • LRULimitedMemoryCache : Die zumindest in letzter Zeit Das verwendete Bitmap wird gelöscht, wenn das Limit für die Cachegröße überschritten wird.
  • FIFOLimitedMemoryCache : Die FIFO-Regel wird zum Löschen verwendet, wenn die Cache-Größengrenze überschritten wird.
  • LargestLimitedMemoryCache : Die größte Bitmap wird gelöscht, wenn das Limit für die Cachegröße überschritten wird.
  • LimitedAgeMemoryCache : Das Cache-Objekt wird gelöscht, wenn seine Alter überschreitet definierten Wert .
  • WeakMemoryCache : Ein Speicher-Cache mit nur schwachen Verweisen auf Bitmaps.

Ein einfaches Anwendungsbeispiel:

ImageView imageView = groupView.findViewById(R.id.imageView);
String imageUrl = "http://site.com/image.png"; 

ImageLoader imageLoader = ImageLoader.getInstance();
imageLoader.init(ImageLoaderConfiguration.createDefault(context));
imageLoader.displayImage(imageUrl, imageView);

Dieses Beispiel verwendet den Standard UsingFreqLimitedMemoryCache .

2voto

Taoufix Punkte 374

Googles libs-for-Android hat eine schöne Bibliothek für die Verwaltung von Bild- und Dateicache.

http://code.google.com/p/libs-for-Android/

1voto

Jorgesys Punkte 119076

1voto

Thunder Rabbit Punkte 5282

Ich hatte schon seit einiger Zeit damit zu kämpfen, dass die Antworten, die SoftReferences verwenden, ihre Daten zu schnell verlieren würden. Die Antworten, die vorschlagen, einen RequestCache zu instanziieren, waren zu chaotisch, und ich konnte nie ein vollständiges Beispiel finden.

Mais ImageDownloader.java funktioniert bei mir wunderbar. Es wird eine HashMap verwendet, bis die Kapazität erreicht ist oder bis die Zeitüberschreitung für die Bereinigung eintritt, dann werden die Dinge in eine SoftReference verschoben, wodurch das Beste aus beiden Welten genutzt wird.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X