BitmapFactory.decodeStream(memory leak)

M

mr.freeze

Ambitioniertes Mitglied
1
Hallo,
ich lade über urls bilder in eine liste.
wenn ich dann auf einen listeneintrag klicke soll das dazugehörige
bild in einer neuen View angezeigt werden.

ich bekomme leider wegen der "BitmapFactory.decodeStream()"
folgende fehlermeldung:
"java.lang.OutOfMemoryError: bitmap size exceeds VM budget"

gibt es noch eine andere möglichkeit bilder von einer url zu beziehen?
oder eine möglichkeit den fehler zu beheben oder zu umgehen?

Gruß
 
Du musst einfach nur lesen was da steht, mehr können wir auch nicht.
Wenn es nicht klappt, zieh ein englischwörterbuch zur Hilfe!
 
lol

das sagt mir, dass du das problem nicht kennst!

und davon auszugehen, dass man das nicht übersetzen kann,
find ich naja....
 
Cached du die Bilder ?

Oder ziehst du sie erneut vom Netz wenn du auf den List Eintrag drückst
 
Ich hole sie wieder.

Weiß noch nicht genau, ob ich sie in eine Datenbank speichern werde
oder nicht!
 
Genau da wird dein Problem sein, Cache sie beim erstenmal auf die SD Karte oder irgendwo hin.

Und ab dann nimmst sie daraus ist denk ich auch besser wegen Traffic etc
 
mr.freeze schrieb:
ich bekomme leider wegen der "BitmapFactory.decodeStream()"
folgende fehlermeldung:
"java.lang.OutOfMemoryError: bitmap size exceeds VM budget"

Meistens ist Speicher schon eigentlich genug vorhanden - nur noch nicht freigegeben.
Öfter mal System.gc() aufrufen um garbage collection zu erzwingen hilft da (besonders beim Laden von vielen Bildern). Außerdem musst du mal gucken ob du nicht mehr benötigte Bitmaps auch alle korrekt recycle()st ...

Wenn das nichts hilft und die Bilder wirklich zu groß sind (unwahrscheinlich eigentlich!) dann kannst du beim decode noch in den opts angeben dass kleingesamplet werden soll.
 
v Ralle v schrieb:

Äh, das ist doch genau was ich geschrieben habe falls wirklich kein Speicher da ist ...

Und ich habe gerade zwei Tage mit dem Problem verbracht hunderte Bilder mit bis zu mehreren MB Größe pro Bild zu laden und NIE war nicht genug Speicher da so dass runtergesamplet werden musste! Hab den Code nur noch zu Notlösung drin ...
 
Zuletzt bearbeitet:
miha schrieb:
Äh, das ist doch genau was ich geschrieben habe falls wirklich kein Speicher da ist ...

Und ich habe gerade zwei Tage mit dem Problem verbracht hunderte Bilder mit bis zu mehreren MB Größe pro Bild zu laden und NIE war nicht genug Speicher da so dass runtergesamplet werden musste! Hab den Code nur noch zu Notlösung drin ...

Ja richtig, sorry mein Fehler, hatte es nur überflogen. Darauf angespielt hatte ich aber am meisten auf die Zeile:

options.inTempStorage = new byte[16*1024];
 
Hallo,

ich hatte es geändert von Bitmap zu Drawable und da gibts kein
recycle().

Code:
Drawable photo = Drawable.createFromStream(is, "src name");

mit System.gc() dauert es länger bis das problem auftaucht.
ist leider noch da!
 
Dann lad halt nicht des komplette Bild auf einmal mit herrunter.
//EDIT

So hatte ich das gemeint.
Code:
Url url = new URL("http://asdasdasd.de/BILD.jpg");
InputStream input = url.openStream();

DataInput.. dataI = new DataInput..(input);

FileOutputS.. out  = new openFileOutput("DEIN_CACHE_BILD.png", MODE_APPEND);

byte[] buffer = new byte[50];
int len = 0;

do{
   len = dataI.read(buffer);
   out.write(buffer);
}while(len != -1);
 
Zuletzt bearbeitet:

Ähnliche Themen

K
Antworten
1
Aufrufe
1.094
markus.tullius
markus.tullius
Jaiel
  • Jaiel
Antworten
17
Aufrufe
1.693
Jaiel
Jaiel
C
Antworten
0
Aufrufe
883
CoffeeCode
C
Zurück
Oben Unten