We find a tricky ANR problem when using MONKEY to test our app.
CPU and memory using is in the normal level.
it seems that the ANR is cause by a Timeout KeyEvent faked by MONKEY sending to our app’s Activity. Below is the part of log:
“
ANR:
Time: 2016-12-29 15:36:08
Window: AppWindowToken{56a48d3 token=Token{abb12c2 ActivityRecord{cb0230d u0 <our app’s activity> t34}}} - Window{40c381a u0 <our app’s activity>}
DispatchLatency: 5005.0ms
WaitDuration: 5003.6ms
Reason: Waiting to send key event because the focused window has not finished processing all of the input events that were previously delivered to it. Outbound queue length: 0. Wait queue length: 1.
ANR:
11: channelName='40c381a <our app’s activity> (server)', windowName='Window{40c381a u0 <our app’s activity>', status=NORMAL, monitor=false, inputPublisherBlocked=false
OutboundQueue: <empty>
WaitQueue: length=1
KeyEvent(deviceId=-1, source=0x00000101, action=0, flags=0x00000008, keyCode=82, scanCode=0, metaState=0x00000000, repeatCount=0), policyFlags=0x6b000000, eventT=12621294000000, targetFlags=0x00000101, resolvedAction=0, age=5014.4ms, wait=5011.8ms
”
But the trace log is
“
"main" prio=5 tid=1 Native
| group="main" sCount=1 dsCount=0 obj=0x75fc23f0 self=0x7fa2f04a00
| sysTid=1478 nice=0 cgrp=default sched=0/0 handle=0x7fa321ba98
| state=S schedstat=( 0 0 0 ) utm=3806 stm=1660 core=0 HZ=100
| stack=0x7fca45d000-0x7fca45f000 stackSize=8MB
| held mutexes=
kernel: __switch_to+0x7c/0x88
kernel: SyS_epoll_wait+0x298/0x328
kernel: SyS_epoll_pwait+0xa4/0x118
kernel: el0_svc_naked+0x24/0x28
native: #00 pc 000000000006b418 /system/lib64/libc.so (__epoll_pwait+8)
native: #01 pc 000000000001e7cc /system/lib64/libc.so (epoll_pwait+64)
native: #02 pc 000000000001a26c /system/lib64/libutils.so (_ZN7android6Looper9pollInnerEi+156)
native: #03 pc 000000000001a120 /system/lib64/libutils.so (_ZN7android6Looper8pollOnceEiPiS1_PPv+60)
native: #04 pc 00000000000ef3bc /system/lib64/libandroid_runtime.so (_ZN7android18NativeMessageQueue8pollOnceEP7_JNIEnvP8_jobjecti+48)
native: #05 pc 00000000008e8000 /system/framework/arm64/boot-framework.oat (Java_android_os_MessageQueue_nativePollOnce__JI+140)
at android.os.MessageQueue.nativePollOnce(Native method)
at android.os.MessageQueue.next(MessageQueue.java:323)
at android.os.Looper.loop(Looper.java:145)
at com.android.server.SystemServer.run(SystemServer.java:419)
at com.android.server.SystemServer.main(SystemServer.java:239)
at java.lang.reflect.Method.invoke!(Native method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:938)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:828)
”
Our main thread is waiting for get the message from MessageQueue. The inputmanager send a KeyEvent to our Activity but our main thread seems not receive the event and still waiting for the message to handle.
What reason causes this problem?
User contributions licensed under CC BY-SA 3.0