1. Red0r, 19.04.2011 #1
    Red0r

    Red0r Threadstarter Neuer Benutzer

    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

  3. klausa2, 25.04.2011 #3
    klausa2

    klausa2 Fortgeschrittenes Mitglied

    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.