OutOfMemory Fehler bitte Helfen!

  • Hallo [Blockierte Grafik: https://www.androidpit.de/img/emoticons3/smile.png]
    ich weiß dieses Problem gibts wahrscheinlich oft wenn man mit Bitmaps arbeitet und hab auch schon Lösungsanstätze gefunden doch bei mir klappt das irgendwie nicht so wie erhofft:
    erstmal zum Code
    Bitmap erzeugung:





    erzeugt auf der rechten sowie linken seite jeweils 1 mal das Bitmap stachelnstart^^
    dies wird jz alle 5 sec durch einen handler in meiner MainActivity aufgerufen:


    es macht das was es machen soll nämlich wird alle 5 sec rechts und links mit einer zufälligen Länge ein Bitmap produziert. Doch schon beim ersten durchlauf hängt die app kurz dann wirds produziert und das wird von mal zu mal schlimmer bis Sie abstürzt und den Fehler java.lang.OutOfMemoryError: Failed to allocate a 916812 byte allocation with 267632 free bytes and 261KB until OOM anzeigt.
    Im Code hab ich den Garbage Collecter (System.gc()) verwendet was aber genauso wenig hilft wie image.recycle();
    hat hierfür jemand eine lösung?
    übrigens https://developer.android.com/…d-bitmap.html#load-bitmap hab ich mir durchgelesen und ausprobiert aber hat auch nicht so geklappt wie ich mir das vorgestellt habe ^^
    Vielen Danke schonmal im Vorraus
    Grüße Hendrix [Blockierte Grafik: https://www.androidpit.de/img/emoticons3/smile.png]

  • System.gc startet nicht den garbage collector. Der kann nicht manuell gestartet werden. Du sagst damit nur dem system, starte ihn schneller als per default. Das System wartet halt den günstigsten zeitpunkt ab, mit deinem aufruf erhöhst du nur die toleranz für diesen zeitpunkt. Aber aller 5 Sekunden ist nun nicht wirklich ein so kurzer zeitraum, dass das System das nicht hinbekommen sollte. Ich frage mich aber warum deine Bilder 1MB groß sind. Zumindest lässt die Fehlermeldung darauf schließen.

  • Hi Hendrix


    das Problem ist das du immer neue Bitmap erzeugst und die alten währenddessen noch vorhanden sind.
    Der recycle Aufruf eines Bitmaps markiert für den GC das, das Bitmap sozusagen tot ist. Das funktioniert aber nur wenn es keine Referenz mehr
    auf dieses Bitmap gibt.
    Ich denke einfach das du pro neue TrapView die du über dein Handler erzeugst und zu deinem View Container immer neu hinzufügst, das auch jedes mal zwei
    Bitmaps erzeugt werden. Wenn es sich bei deinem Container um eine ScrollView handelt, existieren deine erzeugten Bitmaps im Speicher noch, selbst wenn sie auf dem Display
    grade nicht sichtbar sind.


    Du solltest dir mal die RecyclerView & StaggeredGridLayoutManager von Google anschauen.


    https://developer.android.com/…/widget/RecyclerView.html


    https://developer.android.com/…redGridLayoutManager.html


    Dahinter verbirgt sich das Konzept erzeugte Views innerhalb eines scrollbaren Bereichs wieder zuverwenden, wenn sie aus dem sichtbaren Bereich verschwinden.
    Dies sorgt auch dafür das dein Content flüssiger scrollt.


    Ich hoffe das hilft dir etwas weiter

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!