Ich benutze Universal Image Loader und ich bekomme ziemlich viele Bilder, die nicht jeden Tag geladen werden können. Ich verwende diesen Code, um meine Fehler zu Analytics zu bekommen.Universal Image Loader kann Bilder manchmal nicht laden
Die meiste Zeit fängt es Ausnahme ab, wie getType, oder getCause ist null. Dieses Problem tritt auf Geräten mit 2.1-2.3 Android-Versionen auf, aber es gibt einige Berichte von neueren Versionen wie 4.0.4 oder sogar 4.2.2. So kann ich nicht wirklich sagen, was verursacht, dass das Bild nicht laden konnte
Ein anderes Problem ist IO_ERROR java.io.EOFException
, das meistens auf neueren android Versionen gesehen wird.
Dritte der häufigsten Fehler sind out_of_memory Fehler ... Die Bilder, die ich laden möchte, sind nicht größer als 1mb, aber ich muss ScaleType.Exactly haben, aber während ich größere Bilder lade ich nicht im Speicher oder zwischenspeichern Disc, um die Möglichkeit von out_of_memory zu reduzieren, aber es tritt immer noch ziemlich oft auf.
Meine Konfiguration:
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(xxx.getApplicationContext())
.threadPoolSize(4)
.memoryCache(new WeakMemoryCache())
.imageDownloader(new BaseImageDownloader(xxx.getApplicationContext(),10 * 1000, 30 * 1000))
.build();
if(!ImageLoader.getInstance().isInited())
ImageLoader.getInstance().init(config);
// options is used for images smaller in size (5kb-150kb)
options = new DisplayImageOptions.Builder()
.cacheInMemory()
.cacheOnDisc()
.showStubImage(R.drawable.stub)
.showImageOnFail(R.drawable.failed)
.imageScaleType(ImageScaleType.EXACTLY)
.bitmapConfig(Bitmap.Config.RGB_565)
.build();
// options2 is used for images big in size (300kb-1,2mb)
options2 = new DisplayImageOptions.Builder()
.showStubImage(R.drawable.stub)
.showImageOnFail(R.drawable.failed)
.imageScaleType(ImageScaleType.NONE) // NONE because I need to have full size bitmap loaded
.bitmapConfig(Bitmap.Config.RGB_565)
.build();
Könnte mir jemand sagen, wie kann ich meinen imageLoading optimiere weniger zu bekommen scheiterten Bilder zu laden? Weil ich das Gefühl habe, dass ich einige Benutzer aufgrund dieser ständigen Fehler beim Laden von Bildern verliere.
aktualisieren Als ich den Code geändert, wie nostra auf onLoadingFailed
vorgeschlagen, bin ich jetzt zu sehen, dass alle Berichte, die nicht .getCause()
hat sind „DECODING_ERROR“ und all diese von android 2.2-2.3.6 Versionen berichtet Keine von neueren. Aber immer noch ein großer Teil meiner Benutzer sind auf älteren Androids, irgendeine Idee, wie man diesen decoding_error reduziert? Ich habe App selbst auf älteren Androids überprüft, und Bilder laden die meiste Zeit, aber DECODING_ERROR
wird am häufigsten über Analytics gemeldet. Zweitens auf dem beliebtestenen Gründen ist immer noch der gleiche IO_ERROR java.io.EOFException
Update 2
Customized Downloader als nostra vorgeschlagen, reduziert threadPoolSize bis 3 eine zusätzliche Belastung einrichten - wenn Laden versucht, scheitert erneut für eine Zeit zu laden, bevor er oben. Ich sehe Mängel beim Laden um etwa 30% verringert. Aber immer noch auftreten - 100 Decodierungsfehler (ausschließlich nur auf 2.2-2.3.6 Versionen) und 160 EOF Fehler (4.0 und höher) in 3 Tagen von 500 täglich aktiven Benutzern.
Update 3
Neueste aktualisierte Version weit weniger Dekodierfehlern und EOFExceptions wird, denke ich, vor allem, weil ich versuche, das gleiche Bild neu zu laden, wenn es das erste Mal geladen werden kann. Aber .. Ich bin jetzt ein anderes Problem: Kein Platz mehr auf dem Gerät java.io.IOException: write failed: ENOSPC (No space left on device)
. Ich verwende LimitedDiscCache.
Vielleicht sollte ich CasheInMemory überhaupt nicht verwenden, um die Möglichkeit von out_of_memory zu reduzieren? Ich tue mein Bestes, um die Größe für Bilder auf der Serverseite zu reduzieren (komprimierte und angezeigte thumbnailed Bilder), aber ich bekomme immer noch out_of_memory in Analytics gemeldet. Ich selbst kann keine dieser Fehler reproduzieren. Abgesehen von EOFException tritt es sehr selten auf, während ich versuche, bereits zwischengespeicherte Bilder schnell durchzuwischen, und einige von ihnen können nicht mit EOFException geladen werden. Für die Internetverbindung kann ich nicht genau sagen, aber die meisten meiner Benutzer sind nicht auf Wifi, so dass sie langsam Verbindung haben können – Datenshi
Auch versuchen, Thread-Pool-Größe zu reduzieren. Vielleicht hilft es, DECODING ERRORS zu verhindern. – NOSTRA
Aktualisierte Antwort. UPD2, um DECODING_ERROR zu verhindern. – NOSTRA