ANR 输入调度超时

72

ANR输入分派超时(等待发送非键事件,因为触摸窗口尚未完成对500.0ms前已传递到其上的某些输入事件的处理。等待队列长度:60。等待队列头龄:8503.2ms。)

嗨!我收到了几个用户发来的这个奇怪的ANR报告。不幸的是,我对ANR报告的知识非常有限,希望有人能够帮助我理解可能的原因。

"main" prio=5 tid=1 Suspended
| group="main" sCount=1 dsCount=0 obj=0x74a20f90 self=0x557fe6f9d0
| sysTid=23849 nice=1 cgrp=top_visible sched=0/0 handle=0x7faf4f5000
| state=S schedstat=( 79111961552 2206905376 39235 ) utm=7534 stm=377 core=7 HZ=100
| stack=0x7fdaaf0000-0x7fdaaf2000 stackSize=8MB
| held mutexes=
at android.os.MessageQueue.removeMessages(MessageQueue.java:682)
- locked <0x08f02647> (a android.os.MessageQueue)
at android.os.Handler.removeMessages(Handler.java:652)
at android.view.Choreographer.removeCallbacksInternal(Choreographer.java:418)
- locked <0x0bd41e74> (a java.lang.Object)
at android.view.Choreographer.removeCallbacks(Choreographer.java:406)
at android.view.View.removeCallbacks(View.java:13179)
at android.support.v4.widget.aa.a(unavailable:-1)
at android.support.v4.widget.DrawerLayout.a(unavailable:-1)
at android.support.v4.widget.DrawerLayout.onInterceptTouchEvent(unavailable:-1)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2108)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2525)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2525)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2525)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2525)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2525)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2525)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2525)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
at com.android.internal.policy.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2461)
at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1777)
at android.app.Activity.dispatchTouchEvent(Activity.java:2865)
at android.support.v7.view.n.dispatchTouchEvent(unavailable:-1)
at android.support.v7.view.n.dispatchTouchEvent(unavailable:-1)
at com.android.internal.policy.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2422)
at android.view.View.dispatchPointerEvent(View.java:9610)
at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4436)
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4302)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3836)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3889)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3855)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3981)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3863)
at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4038)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3836)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3889)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3855)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3863)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3836)
at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:6135)
at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:6109)
at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:6070)
at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:6251)
at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:192)
at android.os.MessageQueue.nativePollOnce(Native method)
at android.os.MessageQueue.next(MessageQueue.java:330)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5546)
at java.lang.reflect.Method.invoke!(Native method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:684)

1
ANR(Activity Not Responding)活动未响应。可能是因为您在主线程中执行了过多的工作。 - mromer
问题是我没有在主线程上做太多的工作(据我所知) - 尽管我正在使用带有Google地图mapfragment的viewpager - 也许是因为mapfragment正在加载大量自定义瓷砖,尽管它不可见? - andMarkus
当你遇到ANR时,MapFragment是否可见?如果不可见,你可以尝试告诉ViewPager应该缓存多少页,或者加载一个空的Fragment来检查问题是否出在MapFragment上。 - mromer
你好,我遇到了与ExoPlayer列表相同的问题,这个ANR只在MotoG4设备上出现。在所有其他设备上,它都可以完美地工作。错误:原因:输入调度超时(等待发送非关键事件,因为触摸窗口尚未完成处理某些在500.0ms前传递给它的输入事件。等待队列长度:8。等待队列头龄:5766.3ms)。 - Vikramsinh Gaikwad
2个回答

22

当我使用循环并且有一个条件用于循环的增量时,发生了这种情况。但是我没有设置当条件不被满足时的增量。因此,循环停滞了。这导致了上述错误。

如果没有您的代码,我无法提供帮助。但是上述原因可能是您出错的可能原因。


8

很显然,你的日志不完整。它只显示了主线程的日志,还有其他线程的日志。

在主线程中,从这个:"main" prio=5 tid=1 Suspended,我们知道该线程被挂起了。在此之前,它:

- locked <0x08f02647> (a android.os.MessageQueue) at android.os.Handler.removeMessages(Handler.java:652) at android.view.Choreographer.removeCallbacksInternal(Choreographer.java:418) - locked <0x0bd41e74> (a java.lang.Object)

你应该搜索日志以检查哪个线程正在等待锁定 <0x08f02647> 和 <0x0bd41e74>,然后你可能会发现一些线索。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接