Почему андроид рассматривает приложение в ANR, когда он находится в ожидании петлителя

В моем журнале logcat для Android я вижу:

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

И затем, когда я перехожу в /data/anr/traces.txt, я вижу

 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) 

Мой вопрос в том, почему андроид считает, что приложение находится в ANR, когда трассировка стека показывает главный поток в Looper, ожидающий сообщения? Это кажется мне нормальным. Я понимаю, что андроид показывает ANR, когда основной поток загружает что-то / делает длинную операцию. Но кажется нормальным, что он ждет сообщения. Пожалуйста, поменяйте меня, если я ошибаюсь.

Я нашел этот интересный отчет об ошибке:

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

Краткое изложение состоит в том, что, как представляется, в коде оболочки NDK имеется ошибка, которая означает, что события, поступающие из нескольких источников, могут вызывать ANR. Это точно соответствует моему варианту использования. У меня есть приложение NDK с работой, происходящей в фоновом потоке и геймпаде, и ANR, который я получаю, точно совпадает с тем, который вы описали, и тем, который был указан в отчете об ошибке.

Это похоже на вашу настройку?

Обновление: дополнительная информация: http://ps3computing.blogspot.co.uk/2012/12/anr-application-not-responding.html

После применения исправления, описанного в его блоге, я, похоже, не могу снова показать манифест ANR. Это не значит, что прошло, хотя …

Intereting Posts
Как использовать построитель запросов ORMLite для получения итоговых записей в таблице Android Multitouch – можно протестировать в эмуляторе? Проблема с круговым открытием и CircularRevealLibrary в Android Как получить имена приложений, видимых на главном экране в Android? AsyncTask поток все еще там после выполнения, это нормально? Android: Как изменить текст в поле EditText? Очень простой код, но получил ошибку «Активность была уничтожена» при использовании фрагмента Что соответствует геоинформации в Android Google Map API V2? Обновление Android Studio 2.0 – общедоступный статический volatile com.android.tools.fd.runtime.IncrementalChange Как использовать пользовательский файл android.media.MediaDataSource вместе с android.media.MediaPlayer? Проблемы с анимацией макета списка React-Native ListView renderRow вызывает передачу реквизитов. Правильный путь или неправильный путь Как отключить / включить кнопку диалога прогресса Как контролировать ширину и высоту диалогового окна Alert Dial по умолчанию в Android? Анимация макетов с использованием атрибута «animateLayoutChanges» в XML