Bitmaps recyclen in onStop() oder extra Thread

  • Antworten:4
Jan Müller
  • Forum-Beiträge: 17

06.06.2012, 13:09:58 via Website

Hi, ich lade in einer App große Bilder. In onStop() starte ich ein Thread, dass die recycle()-Methode der Bitmaps aufruft und Nutzerdaten speichert.
Dabei kann es zu einer NullPointerException kommen, wenn Android die Objekte schon gelöscht hat. Wenn ich aber kein extra Thread starte sondern alles in onStop() mache kann es auf langsamen Geräten passieren, dass es zu einer Fehlermeldung kommt, weil Android die App beendet da es meint sie hätte sich aufgehängt.

Wenn ich einfach einen try/catch Block um das Recyceln mache und es durch eine NullPointerException beendet wird bekomme ich ein OutOfMemoryError beim Neustart der App.

Was kann ich tun?

Antworten
Jan Müller
  • Forum-Beiträge: 17

06.06.2012, 14:15:47 via Website

Ich hab doch oben geschrieben, dass ich das schon gemacht habe. Aber wenn ich die App dann wieder starte gibt es ein OutOfMemoryError weil nicht alle Bitmaps recycled wurden. Gibt es vielleicht eine Methode, mit der alle Bitmaps der App recycelt werden, auch wenn die Objekte nicht mehr vorhanden sind?

Antworten
Rafael K.
  • Forum-Beiträge: 2.359

06.06.2012, 15:28:04 via Website

Für mich klang das oben so, also würdest du die Schleife nach der ersten Exception abbrechen ^^

Wenn du alle recyclen willst, musst du wohl manuell alle zwischenspeichern, die du erzeugst.

Generell ist es aber komisch, dass du einen OOM bekommst, wenn du die App neu startest.
Hast du etwas mit bösen static-Variablen und/oder Singletons rumgespielt?

Antworten
Jan Müller
  • Forum-Beiträge: 17

06.06.2012, 18:25:44 via Website

Rafael K.
Für mich klang das oben so, also würdest du die Schleife nach der ersten Exception abbrechen ^^
Das schon, aber wenn das Array nicht mehr da ist bringt es doch nichts es nochmal mit dem selben Array zu versuchen.

Rafael K.
Wenn du alle recyclen willst, musst du wohl manuell alle zwischenspeichern, die du erzeugst.
Wie meinst du das?

Rafael K.
Generell ist es aber komisch, dass du einen OOM bekommst, wenn du die App neu startest.
Hast du etwas mit bösen static-Variablen und/oder Singletons rumgespielt?
Ich habe nur zwei statische Variablen vom Typ Integer und daran kann es wohl nicht liegen, die Bitmaps sind nicht statisch.

Antworten