2016-03-21 14 views
1

Ich bin verrückt geworden mit diesem Android-Fehler und aus dem Durchsuchen der früheren Beiträge über diesen Fehler keine der Lösungen, die gegeben wurden, hat mir geholfen.Android: Bitmap verursacht nicht genügend Speicherfehler

Ich spreche natürlich über den allmächtigen Killer bekannt als der "Android Out of Memory auf einer (NUMBER) -Byte Zuordnung." Ich versuche einen Foto-Uploader zu erstellen und nach dem 3. oder 4. Bild stürzt meine App ab. Ich weiß, um den Absturz zu stoppen, um eine Ausnahme Catch zu verwenden, aber das ist nicht mein Problem. Ich bin hier, um die Community zu fragen, gibt es eine Lösung, um diesen Bytezuordnungsfehler zu beheben?

Hier ist ein Ausschnitt meines Codes mit der Bitmap.

 String post = editTextPost.getText().toString().trim(); 
     // get the photo : 
     Bitmap image = ((BitmapDrawable)postImage.getDrawable()).getBitmap(); 

     ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); 
     // compress the image to jpg format : 
     image.compress(Bitmap.CompressFormat.JPEG, 45, byteArrayOutputStream); 
     byte[] imageBytes = byteArrayOutputStream.toByteArray(); 
     String encodeImage = Base64.encodeToString(imageBytes,Base64.DEFAULT); 
     // Recycle bitmap : 
     image.recycle(); 
     image=null; 

     // send data : 
     sendPost p = new sendPost(this); 
     p.execute(post, encodeImage); 
     imageBytes=null; 

Im nicht alle Bibliotheken verwenden und möchte es aber auch bleiben, wenn eine Bibliothek ist die einzige Option, die ich eine verwenden. Hoffentlich kann jemand helfen.

+0

Ich glaube nicht, dass Recycling das Bild direkt aus dem Speicher entfernt. Es hängt vom Garbage Collector ab. Recycling zwingt es nicht. – hasan83

Antwort

2

Bitmaps werden nicht vollständig wiederverwendet, wenn sie an eine Ansicht angehängt sind, z. B. an ein ImageView. Wenn Sie imageView.setImageBitmap(bitmap) tun, müssen Sie sie löschen, bevor Sie imageView.setImageBitmap(null) löschen und einen anderen Verweis auf eine beliebige Ansicht löschen.

+0

das hat den Trick gemacht! Danke für die Antwort – DetectiveClarke

0

Nachdem Sie das Bild fertig uplloading die von der "postImage" belegten Speicher freizugeben -

postImage.setImageDrawable(null); 

Dies wird lösen alle von der Bitmap belegten Speicher zugeordnet postImage

0

Allgemeine Antwort:

Wenn Sie Dateien hochladen, müssen Sie einen Stream zu Ihrem Server und zuöffnenIhre Datei zur gleichen Zeit. Lesen und Schreiben von Stück für Stück von 1 MB für Beispiel. Auf diese Weise erhalten Sie keine Ausnahmebedingung.

Verwandte Themen