11-24 23:19:18.434: ERROR/AndroidRuntime(12660): Uncaught handler: thread main exiting due to uncaught exception
11-24 23:19:18.684: ERROR/AndroidRuntime(12660): java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.[email protected]
11-24 23:19:18.684: ERROR/AndroidRuntime(12660):     at android.graphics.Canvas.throwIfRecycled(Canvas.java:955)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660):     at android.graphics.Canvas.drawBitmap(Canvas.java:1044)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660):     at android.graphics.drawable.BitmapDrawable.draw(BitmapDrawable.java:291)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660):     at android.widget.ImageView.onDraw(ImageView.java:908)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660):     at android.view.View.draw(View.java:6283)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660):     at android.view.ViewGroup.drawChild(ViewGroup.java:1581)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1311)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660):     at android.view.ViewGroup.drawChild(ViewGroup.java:1579)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1311)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660):     at android.view.View.draw(View.java:6286)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660):     at android.view.ViewGroup.drawChild(ViewGroup.java:1581)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1311)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660):     at android.widget.AbsListView.dispatchDraw(AbsListView.java:1323)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660):     at android.widget.ListView.dispatchDraw(ListView.java:2933)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660):     at android.view.View.draw(View.java:6389)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660):     at         android.widget.AbsListView.draw(AbsListView.java:2142)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660):     at android.view.ViewGroup.drawChild(ViewGroup.java:1581)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1311)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660):     at android.view.ViewGroup.drawChild(ViewGroup.java:1579)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1311)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660):     at     android.view.View.draw(View.java:6286)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660):     at android.view.ViewGroup.drawChild(ViewGroup.java:1581)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1311)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660):     at android.view.View.draw(View.java:6286)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660):     at android.widget.FrameLayout.draw(FrameLayout.java:352)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660):     at android.view.ViewGroup.drawChild(ViewGroup.java:1581)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660):     at     android.view.ViewGroup.dispatchDraw(ViewGroup.java:1311)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660):     at android.view.View.draw(View.java:6286)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660):     at android.widget.FrameLayout.draw(FrameLayout.java:352)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660):     at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1928)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660):     at android.view.ViewRoot.draw(ViewRoot.java:1454)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660):     at android.view.ViewRoot.performTraversals(ViewRoot.java:1174)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1774)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660):     at android.os.Handler.dispatchMessage(Handler.java:99)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660):     at android.os.Looper.loop(Looper.java:123)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660):     at android.app.ActivityThread.main(ActivityThread.java:4321)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660):     at java.lang.reflect.Method.invokeNative(Native Method)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660):     at java.lang.reflect.Method.invoke(Method.java:521)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660):     at dalvik.system.NativeStart.main(Native Method)

He implementado una memoria caché de la imagen con SoftReference y establecer un ImageView con un mapa de bits de la memoria caché de la imagen.

Yo no uso de mapa de bits.papelera() y comprobar el mapa de bits.isRcycled() antes de ajustar el mapa de bits en un ImageView.

Yo no puedo entender por qué el lienzo de dibujo con un reciclado de mapa de bits.
Sucede pocas veces, pero no sucedió.

Alguna sugerencia?
Gracias!

Por favor, revise la solución que me han dado en otro hilo. stackoverflow.com/questions/6791742/…
Esta solución funcionó para mí: stackoverflow.com/a/7984324/242769

OriginalEl autor shiami | 2010-11-24

3 Comentarios

  1. 4

    Si alguien llega aquí y está luchando para averiguar que de mapa de bits es reciclado (como hice yo), he aquí lo que terminé haciendo para solucionar este:

    1) he hecho un mundial Thread.setDefaultUncaughtExceptionHandler que vierte el montón (yo en realidad ya lo tenía en el lugar para diagnosticar OOM errores). El código dentro del controlador es este:

    File f = new File(Environment.getExternalStorageDirectory(),"oom-error.hprof");
    String path = f.getAbsolutePath();
    //force a few GC before dumping stuff
    System.gc();
    System.gc();    
    Debug.dumpHprofData(path);

    2) el Uso de este gran artículo, usted puede aprender cómo, a continuación, cargar y analizar la hprof archivo de volcado con MAT.

    3) Dentro de la ESTERA, la primera vez filtrada por clases de «mapa de bits» regex, y luego miró para el mapa de bits id de referencia (en OP caso: «4384c218»). Esto le dará una idea bastante buena de lo que la vista es la celebración de este reciclado de mapa de bits y se puede empezar a pensar en la solución.
    (En mi caso, yo era el reciclaje de imágenes de una caché común, algunos de los cuales fueron dibujables que también fueron utilizados en XML diseños y debería haber sido «clavado» a la caché hasta que OnDestroy).

    OriginalEl autor snowdragon

  2. 0

    Usted no debe usar la misma imagen de recursos para las diferentes Actividades, mientras que uno de ellos es el reciclaje de su mapa de bits.

    Si tienes esta situación, se ha cambiado la imagen de los recursos de una de esas Actividades.

    OriginalEl autor Bobs

  3. 0

    El mismo problema, pero ahora me lo ha solucionado. Intenta de esta forma cuando se recarga un png o otros:

    BitmapFactory.decodeStream(getResources().openRawResource(R.drawable.png1));

    Debo saber cuando el png1 fue reciclado, si no, también puede tratar de atrapar la excepción RuntimeException.

    OriginalEl autor user656751

Dejar respuesta

Please enter your comment!
Please enter your name here