View Pager mit Universal Image Loader Out of Memory " - Fehlermeldung
Ich bin nicht wirklich sicher, ob ein ViewPager mit Universal Image Loader kann/sollte verwendet werden, als eine Alternative für eine Galerie wie interface, da ich auf einen Out of Memory Fehler beim laden der Bilder von der SD-Karte und betrachten Sie Sie im Vollbild-Modus. Egal welche Nummer, es funktioniert alles sehr gut mit einem GridView-aber beim betrachten der Bilder in der View Pager, einzelnen bitmap-hält das Essen bis eine Menge Speicher, und nach 10 oder so Bilder, es gibt die out-of-memory-Fehler.
Ich gesehen habe fast alle Fragen, die gepostet wurden, hier bezogen auf die Out-of-Memory-Fehler beim arbeiten mit dem Universal Image Loader und in jedem von Ihnen gibt es eine Konfigurationen-Fehler als Ursache.
Ich weiß nicht, ob ich das falsche Konfigurationen oder was, aber ich habe verschwendet viel Zeit auf ihm und bin irgendwie hängen geblieben, keine Hilfe/Ratschläge würde geschätzt.
Sind die Konfigurationen für die ImageLoader:
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext())
.memoryCache(new WeakMemoryCache())
.denyCacheImageMultipleSizesInMemory()
.discCacheFileNameGenerator(new Md5FileNameGenerator())
.imageDownloader(new ExtendedImageDownloader(getApplicationContext()))
.tasksProcessingOrder(QueueProcessingType.LIFO)
// .enableLogging() //Not necessary in common
.build();
Das Display-Bild-Optionen sind:
options = new DisplayImageOptions.Builder()
.showImageForEmptyUri(R.drawable.image_for_empty_url)
.resetViewBeforeLoading()
.imageScaleType(ImageScaleType.IN_SAMPLE_INT)
.bitmapConfig(Bitmap.Config.RGB_565)
.displayer(new FadeInBitmapDisplayer(300))
.build();
Ich bin mit dem Beispiel-Projekt, das mit der Bibliothek, aber diese Einstellungen nicht funktionieren, entweder, es einfach abstürzt nach einiger Zeit. Meine Vermutung ist, dass es einen bestimmten callback, wo ich Sie zu recyceln bitmaps von den Ansichten aus, die nicht sichtbar sind.
EDIT: ich weiß, das ist ein Speicher-Leck, die Ansichten, die nicht sichtbar sind, werden zerstört, wenn Sie sein sollten, aber der Speicher wird nicht freigegeben, wie es sollte. Hier ist die Umsetzung der destroyItem Rückruf, befolgt die Tipps in verschiedenen Fragen, aber noch keinen finden, der memory-leak.
@Override
public void destroyItem(View container, int position, Object object) {
// ((ViewPager) container).removeView((View) object);
Log.d("DESTROY", "destroying view at position " + position);
View view = (View)object;
((ViewPager) container).removeView(view);
view = null;
}
InformationsquelleAutor der Frage Faraz Hassan | 2013-02-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen, nächste Vorschläge:
ImageScaleType.EXACTLY
.discCacheExtraOptions(maxImageWidthForDiscCache, maxImageHeightForDiscCache, CompressFormat.PNG, 0);
InformationsquelleAutor der Antwort NOSTRA
Es ist wahrscheinlich nicht die beste Umsetzung, um es zu lösen, aber es funktionierte für mich. Entfernen des ImageViews ist nicht genug, also beschloss ich zu recyceln bitmaps in 'destroyItem':
Diese nicht sauber die letzten 3 aktiven Seiten, der beim verlassen der Aktivität, obwohl ich hoffe, dass GC kümmert sich um Sie.
InformationsquelleAutor der Antwort txuslee
Nur dieses posting, denn diese Frage kommt bei Google bei der Suche nach UIL und OOP. Ich hatte OOP-Probleme, egal in welcher Konfiguration, was alle meine Probleme gelöst waren die beiden Klassen
RecyclingImageView
undRecyclingBitmapDrawable
aus diese Beispielprojekt.InformationsquelleAutor der Antwort asco
Ich auch verwendet die gleiche Bibliothek und hatte gleichen Fehler. Als Lösung habe ich eine sparseArray zu halten photoView Instanzen. Und verwenden Sie es wie diese:
Und mit viewPager - listener:
Hoffe, das hilft...
InformationsquelleAutor der Antwort yahya
Ich verwendet kutothe Umsetzung von github Seite Probleme.
InformationsquelleAutor der Antwort Faraz Hassan
Hatte ich das problem, wenn einfach die Einstellung Uri
ImageView
mit:iv.setImageURI(Uri.fromFile(imgFile));
Ich hatte das gleiche problem mit dem Universal Image Loader, und ich sah sogar für andere Grafik-Lader gibt, und fand eine andere gute sogenannte "Picasso", aber es hatte auch das gleiche problem.
So, was für mich gearbeitet wird unter Verwendung
GestureImageView
und Einstellunggesture-image:recycle
true über XML und laden Sie die Bilder mit dem folgenden code:dem Grund, es stürzt ab und geben OOM Fehler ist, dass die bitmaps nicht recycelt, wenn das Bild nicht angezeigt werden auf dem Bildschirm nicht mehr, daher tritt ein Speicherverlust auf.
Wenn es einen anderen Weg, um das Recycling der bitmap in den normalen
ImageView
das wäre eine bessere Lösung.Hoffe, dass ich geholfen habe.
InformationsquelleAutor der Antwort Amjad Abu Saa
Ich weiß, es ist spät, aber vielleicht wird meine Antwort sparen jemand Zeit. Nach Stunden und Stunden zu versuchen, dieses Problem zu lösen (mit fast jeder Antwort gefunden auf stack overflow) ich schließlich löste es mit Fresco Bild-Bibliothek. It ' a eine lib geschrieben, die von Facebook und es das primäre Ziel ist, den Speicher in einer effizienten Art und Weise. Es ist wirklich toll und mein Out Of Memory " - Fehlermeldung verschwunden. Ich empfehle es zu benutzen.
http://frescolib.org/
InformationsquelleAutor der Antwort Jesus Christ