1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Memory management

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Red0r, 19.04.2011.

  1. Red0r, 19.04.2011 #1
    Red0r

    Red0r Threadstarter Neuer Benutzer

    Beiträge:
    2
    Erhaltene Danke:
    0
    Registriert seit:
    19.10.2010
    Ich hab vorkurzem angefangen eine App zu schreiben die sich Bilder ausm Internet holt und diese in Gallery wiedergibt.
    Um die Bilder anzeigen zu lassen werden diese nach Bitmap konvertiert.
    Desweiteren wird in Hintergrund weitere Bilder geladen, damit der nutzer beim sliden kein rukeln bekommt.
    In diesem moment werden alle bilder gecached, da ein nutzer z.b. auch zurück sliden kann und ich ja diese Bilder nicht neu laden möchte.

    Das Problem ist jedoch, ich darf nicht zuviel cachen, den dann sehe ich schnell Out of memory exception.
    Meine Frage ist, wie löst ihr dieses Problem? Gibts dafür schon classen/libs die sowas abfangen/managen? also z.b. immer nur 10 bilder precachen (z.b. 5 links und 5 rechts)
     
  2. SeraphimSerapis, 20.04.2011 #2
    SeraphimSerapis

    SeraphimSerapis Android-Guru

    Beiträge:
    3,072
    Erhaltene Danke:
    1,138
    Registriert seit:
    27.02.2009
  3. klausa2, 25.04.2011 #3
    klausa2

    klausa2 Fortgeschrittenes Mitglied

    Beiträge:
    298
    Erhaltene Danke:
    20
    Registriert seit:
    08.07.2009
    WeakReferences verhindern zwar, dass die GC blockert wird, aber nicht das OutOfMemory. Vor Homeycomb unterliegen Bitmaps leider nicht der normalen GC, sie müssen unbedingt zuerst mit recycle frei gegeben werden. Und falls die letzte Soft- oder Waekreference abgeräumt wurde, dann kommt man gar nicht mehr an die Bitmap ran, um recycle aufzurufen.

    Nach meiner Erfahrung hilft hier nur eine eigene Bitmapverwaltung, die akribisch genau immer weiss, was im Speicher ist, was wann gebraucht wird und nach Bedarf BMs beschafft, frei gibt und recyled. Jeder Code, der irgendwie mit BMs hantiert, darf das nur unter Einschaltung der BM-Verwaltung tun - das betrifft natürlich auch und besonders das indirekte handling von BMs durch die Lifecycle-Methoden.
     

Diese Seite empfehlen