2012-09-30 18 views
5

error:cómo resolver OutOfMemoryError usando LayerDrawable

java.lang.OutOfMemoryError 
at android.graphics.Bitmap.nativeCreate(Native Method) 
at android.graphics.Bitmap.createBitmap(Bitmap.java:605) 
at android.graphics.Bitmap.createBitmap(Bitmap.java:551) 
at android.graphics.Bitmap.createScaledBitmap(Bitmap.java:437) 
at android.graphics.BitmapFactory.finishDecode(BitmapFactory.java:618) 
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:593) 
at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:445) 
at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:775) 
at android.content.res.Resources.loadDrawable(Resources.java:1968) 
at android.content.res.Resources.getDrawable(Resources.java:677) 
at android.widget.ImageView.resolveUri(ImageView.java:542) 
at android.widget.ImageView.setImageResource(ImageView.java:315) 
at app.Main.GridActivity.initaliseLevel(GridActivity.java:245) 
at app.Main.GridActivity.load_player_settings(GridActivity.java:180) 
at app.Main.GridActivity.onResume(GridActivity.java:79) 
at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1158) 
at android.app.Activity.performResume(Activity.java:4607) 
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2448) 
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2486) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2000) 
at android.app.ActivityThread.access$600(ActivityThread.java:128) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1161) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:137) 
at android.app.ActivityThread.main(ActivityThread.java:4517) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:511) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:993) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:760) 
at dalvik.system.NativeStart.main(Native Method) 

Las imágenes son establecidos por:

ImageButton b0 = (ImageButton) findViewById(R.id.ImageButton00); 
Resources r = getResources(); 
Drawable[] layers = new Drawable[2]; 
layers[0] = r.getDrawable(R.drawable.image); 
layers[1] = r.getDrawable(R.drawable.imagetwo); 
LayerDrawable layerDrawable = new LayerDrawable(layers); 
b0.setImageDrawable(layerDrawable); 

Después de leer las respuestas, deduje que las imágenes tienen que ser reciclados después de su uso. ¿Es ésta la mejor opción? Si es así, ¿cómo puede convertirse un LayerDrawable en un mapa de bits, para que pueda reciclarse?

+0

es lo que las dimensiones (ancho x alto) de la imagen que está tratando de cargar? – dumbfingers

+0

Hay aproximadamente 25 layerDrawables todos 175x175px y consisten en 2-3 capas – Isaac

+0

Estoy obteniendo algo similar. Imágenes bastante pequeñas. Si hago un comentario de todas menos una imagen, no hay problema, pero cualquier otra cosa lo bloquea. Hay configuraciones de opacidad en la primera imagen ... ¿no estoy seguro de si eso está causando esto? – RiddlerDev

Respuesta

2

En su manifiesto> sección Atributos de la aplicación hay una configuración de "Gran montón", seleccione su actividad en los Nodos de la aplicación y luego seleccione "verdadero" en la configuración del montón que me ayudó hasta que resolví la fuga.

y también tengo esto en mi actividad:

private void unbindDrawables(View view) { 
    if (view.getBackground() != null) { 
     view.getBackground().setCallback(null); 
    } 
    if (view instanceof ViewGroup) { 
     for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) { 
      unbindDrawables(((ViewGroup) view).getChildAt(i)); 
     } 
     ((ViewGroup) view).removeAllViews(); 
    } 
} 

    @Override 
protected void onDestroy() { 
    super.onDestroy(); 

    unbindDrawables(findViewById(R.id.nameslayout)); 
    System.gc(); 
} 

hop que ayuda

+0

¡Señor, roca! Eso me permitió, al menos, cargar mi pantalla en mi teléfono para poder seguir optimizando. Voy a asegurarme de que también agregue tus elementos del GC, ya que se ve bien. ¡Gracias! – RiddlerDev

+0

¡Estoy contento de poder ayudar! –

Cuestiones relacionadas