¿Por qué Android trata una aplicación en ANR cuando está en la espera de looper

En mi log log android, veo:

01-02 02:01:46.523 E/ActivityManager( 459): ANR in com.android.phone (com.android.phone/.InCallScreen) 

Y luego, cuando voy a /data/anr/traces.txt, veo

 Cmd line: com.android.phone DALVIK THREADS: (mutexes: tll=0 tsl=0 tscl=0 ghl=0) "main" prio=5 tid=1 NATIVE | group="main" sCount=1 dsCount=0 obj=0x410f7508 self=0x40eeeb68 | sysTid=649 nice=0 sched=0/0 cgrp=apps handle=1075429168 | schedstat=( 0 0 0 ) utm=1361 stm=314 core=1 #00 pc 0000dac0 /system/lib/libc.so (epoll_wait+12) #01 pc 00014899 /system/lib/libutils.so (android::Looper::pollInner(int)+96) #02 pc 00014b01 /system/lib/libutils.so (android::Looper::pollOnce(int, int*, int*, void**)+104) #03 pc 00063aeb /system/lib/libandroid_runtime.so (android::NativeMessageQueue::pollOnce(_JNIEnv*, int)+22) #04 pc 0001df30 /system/lib/libdvm.so (dvmPlatformInvoke+112) #05 pc 0004d1fb /system/lib/libdvm.so (dvmCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+394) #06 pc 00038f4d /system/lib/libdvm.so (dvmCheckCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+8) #07 pc 00000214 /dev/ashmem/dalvik-jit-code-cache (deleted) at android.os.MessageQueue.nativePollOnce(Native Method) at android.os.MessageQueue.next(MessageQueue.java:125) at android.os.Looper.loop(Looper.java:124) at android.app.ActivityThread.main(ActivityThread.java:4921) 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:1038) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805) at dalvik.system.NativeStart.main(Native Method) 

Mi pregunta es ¿por qué Android piensa que la aplicación está en ANR cuando el seguimiento de la pila muestra el hilo principal en Looper esperando mensaje? Eso me parece normal. Entiendo que android muestra ANR cuando el hilo principal está descargando algo / haciendo una operación larga. Pero parece normal que esté esperando un mensaje. Por favor corect me si estoy equivocado.

He encontrado este interesante informe de fallos:

http://code.google.com/p/android/issues/detail?id=41755

Breve resumen es que parece haber un error en el código de envoltorio NDK, lo que significa que los eventos procedentes de múltiples fuentes pueden causar una ANR. Esto coincide exactamente con mi caso de uso — Tengo una aplicación NDK con el trabajo que ocurre en los hilos de fondo y un gamepad, y la ANR Estoy consiguiendo coincidencias precisamente la que describió y la del informe de errores.

¿Es esto similar a su configuración?

Actualización: más información: http://ps3computing.blogspot.co.uk/2012/12/anr-application-not-responding.html

Después de haber aplicado la corrección descrita en su blog, no parece ser capaz de hacer el manifiesto ANR de nuevo. Eso no quiere decir que se haya ido, sin embargo …

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.