Warum android behandelt eine app in den ANR, wenn es in den looper wartet
In meinem android-logcat log sehe ich:
01-02 02:01:46.523 E/ActivityManager( 459): ANR in com.android.phone (com.android.phone/.InCallScreen)
Und wenn ich dann gehe zu /data/anr/traces.txt sehe ich
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)
Meine Frage ist, warum android denkt, die app ist in den ANR, wenn der stack trace zeigt den Haupt-thread in "Looper" wartet auf Nachricht? Das scheint mir normal zu sein. Ich verstehe android zeigt, ANR, wenn der main-thread ist der Download etwas/tun, eine lange operation. Aber es scheint normal, dass es warten auf eine Nachricht. Bitte korrekte mich wenn ich falsch bin.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich fand diese interessante bug-report:
http://code.google.com/p/android/issues/detail?id=41755
Kurze Zusammenfassung ist, dass es anscheinend ein bug in der NDK-wrapper-code, was bedeutet, dass Ereignisse aus verschiedenen Quellen kann eine ANR. Dies entspricht exakt meinen Gebrauch Fall --- ich habe eine NDK-app, die mit der Arbeit geschieht im hintergrund-threads und ein gamepad, und die ANR, ich bin immer genau übereinstimmt, die Sie beschreiben und die man in den bug-report.
Ist das ähnlich wie dein setup?
Update: mehr info: http://ps3computing.blogspot.co.uk/2012/12/anr-application-not-responding.html
Nachdem er angewendet die Fehlerbehebung beschrieben in seinem blog, ich bin anscheinend nicht in der Lage sein, um die ANR-manifest wieder. Das ist nicht zu sagen, es ist gegangen, aber...