You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:Input dispatching timedout(HomeActivity无聚焦窗口)引发的ANR问题

ANR问题:Input dispatching timed out (Activity无聚焦窗口)

问题详情

收到的ANR崩溃报告:

Reason: Input dispatching timed out (ActivityRecord{ecaa4d2 u0 /.ui..HomeActivity t3} does not have a focused window)

主线程调用栈:

"main" prio=5 tid=1 Native
  | group="main" sCount=1 dsCount=0 flags=1 obj=0x718474c0 self=0xe4a05410
  | sysTid=1277 nice=-10 cgrp=default sched=0/0 handle=0xecc1d470
  | state=S schedstat=( 10298604300 1305185943 17035 ) utm=910 stm=119 core=2 HZ=100
  | stack=0xff787000-0xff789000 stackSize=8192KB
  | held mutexes=
  native: #00 pc 0007272c  /apex/com.android.runtime/lib/bionic/libc.so (__epoll_pwait+20)
  native: #01 pc 00044209  /apex/com.android.runtime/lib/bionic/libc.so (epoll_wait+16)
  native: #02 pc 00011bad  /system/lib/libutils.so (android::Looper::pollInner(int)+128)
  native: #03 pc 00011ad3  /system/lib/libutils.so (android::Looper::pollOnce(int, int*, int*, void**)+62)
  native: #04 pc 000b9eb9  /system/lib/libandroid_runtime.so (android::android_os_MessageQueue_nativePollOnce(_JNIEnv*, _jobject*, long long, int)+26)
  at android.os.MessageQueue.nativePollOnce(Native method)
  at android.os.MessageQueue.next(MessageQueue.java:335)
  at android.os.Looper.loop(Looper.java:183)
  at android.app.ActivityThread.main(ActivityThread.java:7664)
  at java.lang.reflect.Method.invoke(Native method)
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:952)

主线程组Binder线程信息:

"Binder:1277_1" prio=5 tid=14 Native
  | group="main" sCount=1 dsCount=0 flags=1 obj=0x12f403e0 self=0xe4a06210
  | sysTid=1342 nice=0 cgrp=default sched=0/0 handle=0xc1bcd1c0
  | state=S schedstat=( 167585904 86193790 337 ) utm=14 stm=2 core=0 HZ=100
  | stack=0xc1ad2000-0xc1ad4000 stackSize=1008KB
  | held mutexes=
  native: #00 pc 00071654  /apex/com.android.runtime/lib/bionic/libc.so (__ioctl+12)
  native: #01 pc 0003f76f  /apex/com.android.runtime/lib/bionic/libc.so (ioctl+26)
"Binder:1277_2" prio=5 tid=15 Native
  | group="main" sCount=1 dsCount=0 flags=1 obj=0x12f40458 self=0xe4a13410
  | sysTid=1343 nice=0 cgrp=default sched=0/0 handle=0xc1acc1c0
  | state=S schedstat=( 219541537 179474996 433 ) utm=16 stm=5 core=1 HZ=100
  | stack=0xc19d1000-0xc19d3000 stackSize=1008KB
  | held mutexes=
  native: #00 pc 00071654  /apex/com.android.runtime/lib/bionic/libc.so (__ioctl+12)
  native: #01 pc 0003f76f  /apex/com.android.runtime/lib/bionic/libc.so (ioctl+26)

问题分析

这个ANR的核心原因是输入事件分发超时,且目标HomeActivity未获取聚焦窗口。从调用栈来看:

  • 主线程处于Looper的poll等待状态,说明主线程未被即时唤醒处理输入事件,可能是此前主线程任务阻塞导致事件队列积压,或是窗口本身无法正常接收事件。
  • 两个Binder线程卡在ioctl调用,提示可能存在跨进程通信(IPC)阻塞,比如调用系统服务时同步等待未返回,间接影响了主线程的窗口状态处理。

解决建议

  • 检查HomeActivity窗口初始化流程:排查onCreate、onResume等生命周期方法中是否有耗时操作(如复杂布局加载、同步IO、大量计算),或者WindowManager相关调用是否异常(如窗口添加失败、焦点设置错误),确保窗口能正常完成初始化并获取焦点。
  • 排查主线程阻塞点:使用Android Studio Profiler的CPU监控功能,或开启StrictMode检测主线程的违规操作(如网络请求、数据库操作),将所有耗时任务转移到子线程执行。
  • 排查IPC通信异常:检查代码中是否有同步调用系统服务(如ActivityManager、PackageManager)的逻辑,这类调用如果超时会阻塞Binder线程,进而影响主线程。建议改为异步调用,或设置合理的超时时间。
  • 检查窗口焦点状态:确认没有代码主动设置窗口不可聚焦(如window.setFocusable(false)),同时检查Activity的启动模式是否正确,避免栈管理异常导致窗口被覆盖或失去焦点。
  • 收集更多日志定位问题:复现问题时用adb logcat -v time抓取完整系统日志,重点查看WindowManager相关的错误日志,以及ANR发生前后的进程通信异常信息,进一步缩小问题范围。

内容的提问来源于stack exchange,提问作者Javy Ho

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 17:17:53