1.no focus Window anr
这种一般是有key事件分发导致属于input模块:
大致定位方式:
1.ActivityTaskManager //启动界面
2.wm_set_resumed_activity //系统调用resume
3.InputDispatcher //input 事件分发
4.wm_on_resume_called //客户端接收到系统resume开始创建window
5.input_focus: [Focus request //请求焦点
WindowManager: ANR
6.finishDrawing //window onshow完成
7.input_focus: [Focus entering //拿到焦点
2.input有焦点但是input事件分发超时。
Input dispatching timed out is not responding. Waited 5000ms for FocusEvent(hasFocus=true
no focus window:
1.activity client 端还没有走onresume 此时窗口还没创建;
2.window窗口还没有HAS_SHOW,虽然窗口创建了,但是window状态还没show;
3.window在HAS_SHOW了但是focus还没有enter进去到当前的window;
4.window已经有focus但是发出的keyevent一直没有被client端消费,一般是主线程被占用,
input 的 wait queue队列等待remove的时间超时,耗时导致;
3.过滤条件
ActivityTaskManager|wm_set_resumed_activity|Input|wm_on_resume_called|input_focus|WindowManager|finishDrawing|ANR
4.bugreport中确定pid,tid,uid看耗时。
5.多屏下焦点
当目标key指定dispaly发送,但是目标display当前不是top时候,会有一个切换display的动作,日志:
"Attempting to move non-focused display"
网友评论