OOM - Erkennen und umgehen?

  • Antworten:3
  • OffenNicht stickyBentwortet
Gelöschter Account
  • Forum-Beiträge: 2.492

07.10.2014, 10:42:47 via Website

Hallo,

da ich zur Zeit viel mit Bitmaps arbeite und bei größeren Bitmaps häufig OutOfMemory Fehler auftreten wollte ich fragen, ob es möglich ist im Code irgendwie festzustellen, ob die Anweisung (z.B. Bitmap.rotate) einen OOM Fehler erzeugen würde.
Wenn ja würde ich dann das Bitmap verkleinern und erneut versuchen zu rotieren.
Gibt es die Möglichkeit so einen Error zu erkennen und dann die App aber nicht abstürzen zu lassen?

Antworten
Gelöschter Account
  • Forum-Beiträge: 2.492

07.10.2014, 11:49:59 via Website

Ich glaue ich habe es schon gelöst.
Ich mache einfach einen try{} Block um z.B. das rotate mit dem catch für OutOfMemory Error:

try {
                    mBitmap = Util.rotateImage(mBitmap, 90);
                    RotateBitmap rotateBitmap = new RotateBitmap(mBitmap);
                    mImageView.setImageRotateBitmapResetBase(rotateBitmap, true);
                } catch (OutOfMemoryError e) {
                    // TODO: handle exception
                    Toast.makeText(getApplicationContext(), "zu groß", Toast.LENGTH_LONG).show();
                }

Jetzt kann ich noch in den Catch Block einsetzen, dass er das Bild verkleinern soll. So wäre es doch richtig oder?

Antworten
  • Forum-Beiträge: 11.179

07.10.2014, 16:59:21 via Website

Jup damit verhinderst du diesen Fehler.
Du musst nur wissen, um wie viel du das Bild verkleinern musst, damit der Error nicht mehr kommt.
Threoretisch kannst du auch den gc benutzen (hat aber meistens keine Auswirkung da OOP das allein macht)

LG Pascal

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Gelöschter Account
  • Forum-Beiträge: 2.492

07.10.2014, 18:31:46 via Website

Gut danke.
Ja ich verkleiner das Bild soweit dass es mit den Bildschirmmaßen passt.

Antworten