Wie kann ich Bilder in den Cache stellen, nachdem sie aus dem Internet heruntergeladen wurden?
Antworten
Zu viele Anzeigen?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
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
.
Ich schlage vor ZÜNDUNG Das ist sogar besser als Droid fu
https://github.com/kaeppler/ignition
https://github.com/kaeppler/ignition/wiki/Sample-applications
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.