0

In meiner Anwendung habe ich 3 Bildschirme mit mehreren hochauflösenden Bildern. Die Anzahl der auf einem Bildschirm verwendeten Bilder beträgt etwa 70-75. Ich habe den Code hinzufügen, Bilder in einem Raster-Layout über eine Adapter-Klasse erweitert BaseAdapter geschrieben, in der getView() -Methode ich den Code geschrieben,Android OutOfMemoryError bei Verwendung mehrerer Bilder

adapter = new ImageAdapter(this); 
gridview.setAdapter(adapter); 

int x = (int)(width/5.1f); 
imageView.setId(position); 
imageView.setLayoutParams(new GridView.LayoutParams(x,x)); 
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
imageView.setPadding(4, 20, 4, 20); 

aber während dieses Bildschirm geladen, es viele Speicherprobleme zeigen, und in logcat erhalte ich den fehler,

java.lang.OutOfMemoryError: bitmap size exceeds VM budget 

Bitte teilen, wie ich den Code schreiben könnte, um Speicherprobleme mit mehreren Bildern mit hoher Auflösung zu behandeln. Vielen Dank.

+1

70-75 ... was ist Überraschung, nicht wahr?) Platzieren Sie hier den Code Ihres ImageAdapter –

+1

Sie sollten Thumbnails, nur Lösungen verwenden ... – Ferdau

+0

überprüfen Sie diesen Link auch http://stackoverflow.com/questions/4611822/java-lang-outofmemoryerror-bitmap-size-exceeds-vm -budget – user1298288

Antwort

0

Wenn es keine Möglichkeit gibt, die Bildauflösungen anzupassen, öffnen Sie sie als BitmapFactory.Options().inJustDecodeBounds = true, übergeben Sie Ihre Optionen an die Bilder (gewünschte angepasste Größe) und dekodieren Sie sie dann erneut mit BitmapFactory.Options().inJustDecodeBounds = false.

Die tatsächliche Bytegröße eines Bitmap-Bildes wird berechnet, indem die Anzahl der Pixel mit der Anzahl der für das Pixel zugewiesenen Byte multipliziert wird. ARGB_8888 (was empfohlen wird) weist 4 Bytes pro Pixel zu, daher ist die Größe Breite * Höhe * 4 Bytes.

Für weitere Informationen lesen Sie die Loading Large Bitmaps Efficiently Lektion von Android. Auch dieses post sollte helfen.

Verwandte Themen