2012-11-20 6 views
8

W moim dzienniku android LogCat widzę:Dlaczego traktuje android app w ANR, gdy jest w loopera czeka

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

A potem, kiedy idę do /data/anr/traces.txt widzę

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) 

Moje pytanie brzmi, dlaczego Android myśli, że aplikacja jest w trybie ANR, gdy ślad stosu pokazuje główny wątek w Looper czeka na wiadomość? Wydaje mi się to normalne. Rozumiem, że Android pokazuje ANR, gdy głównym wątkiem jest pobieranie czegoś/wykonywanie długiej operacji. Ale wydaje się normalne, że czeka na wiadomość. Proszę mnie poprawić, jeśli się mylę.

Odpowiedz

2

Znalazłem interesujący raport o błędzie:

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

Krótkie podsumowanie jest to, że wydaje się, że to błąd w NDK kodu otoki, co oznacza, że ​​zdarzenia pochodzące z wielu źródeł może spowodować ANR. Dokładnie pasuje to do mojego przypadku użycia - mam aplikację NDK, w której prace odbywają się w wątkach w tle i gamepada, a ANR dokładnie dopasowuje się do tego, który opisałeś i tego w raporcie o błędzie.

Czy to jest podobne do konfiguracji?

Aktualizacja: więcej informacji: http://ps3computing.blogspot.co.uk/2012/12/anr-application-not-responding.html

po zastosowaniu poprawki opisanej na swoim blogu, że nie wydają się być w stanie dokonać ANR oczywistego ponownie. To nie znaczy, że zniknęło, chociaż ...

Powiązane problemy