ANR高级经验2:No Focused Window类型ANR的各种案例汇总

张开发
2026/4/14 21:50:50 15 分钟阅读

分享文章

ANR高级经验2:No Focused Window类型ANR的各种案例汇总
文章目录背景Not Focused Window类型ANR各种案例汇总有焦点Activity没有焦点Window 最常见的类型窗口状态异常窗口焦点计算后无法焦点SurfaceFlinger中发现焦点窗口不显示InputDispatcher自身原生逻辑有bug其他背景在上一篇关于NO Focused ANR相关详细指导分析文章ANR高级经验分享No Focused类型ANR详细步骤发布后的得到广大网友的一致好评还有许多大厂的技术Leader也帮忙转发所以接着上一篇文章继续来分享一些公司里面实战分析过的这类No Focused ANR的案例希望各位vip学员有了这些案例后可以加快大家对这类疑难ANR的分析定位。这类ANR问题的分析方法和案例在马哥课程和相关blog有进行讲解大概方法汇总如下events日志分析部分dumpsys SF中焦点窗口显示情况dumpsys window中焦点窗口是否计算正常检查应用生命周期看是窗口否显示检查其他性能卡顿相关日志平时马哥也是基于上面的方法去分析对应的No Focused Window ANR问题在工作过程中其实遇到的No Focused ANR其实也是非常非常多的类型绝不是简单的一两种案例那么简单哈在工作中积累了这块的ANR类型应该有多达20种不同原因和类型当然这里的20种也不代表真的全部覆盖只是这里提供给大家一些处理的经验应该也可以覆盖%90以上的No Focused Window ANR问题。Not Focused Window类型ANR各种案例汇总有焦点Activity没有焦点Window 最常见的类型这里主要又可以分为2类一类是dumpsys window发现对应的DRAW_STATE不正常一类是DRAW_STATE正常但是焦点计算异常。窗口状态异常DRAW_STATE处于NO_SURFACE状态一般这种应用没有创建窗口绘制内容的的SurfaceControl或销毁了窗口比如从app是否调用wms的relayout等情况去排查。DRAW_STATE处于DRAW_PENDING状态应用在绘制前卡住或拦截了绘制这块主要排查app的draw方法相关执行分析为啥卡住还有一种是因为app自身有GlSurfaceView触发多线程同步问题DRAW_STATE处于COMMIT_DRAW_PENDING状态这类COMMIT_DRAW_PENDING问题一般就说明当前的app已经绘制完成但system_server层面出现一些逻辑等异常导致没有把这个STATE变成READY_TO_SHOW。所以一般这种情况都是由wms显示框架工程师进行排查进一步原因以前也遇过案例就是公司相关业务人员框架修改导致deferLayout后没有调用continueLayout影响WMS流程分屏、小窗曾导致。DRAW_STATE处于READY_TO_SHOW状态这种问题也是一样一般由wms显示框架工程师进行排查进一步原因虽然最后原因不一定systemserver的以前也遇过案例就是属于同一个Activity的多个窗口有一个没完成绘制这种最经典就是桌面有负一屏时候负一屏是一个独立的Window一般这个Window还是其他app进行绘制。也有activity过渡动画超时查出原生bug时序问题。窗口焦点计算后无法焦点这种一般主要到窗口焦点计算地方进行打印和调试追查原因看一下是啥原因会导致最后没有焦点。具体案例比如应用窗口属性设置错误或者有一些框架需求修改了焦点计算逻辑导致。SurfaceFlinger中发现焦点窗口不显示因为最后焦点的设置是要InputDispatcher中识别有就是有但是InputDispatcher数据又是从SF中进行的设置不是以前的WMS直接设置所以你如发现出现ANR时候发现dumpsys window等都正常但dumpsys input就是没有焦点窗口那么就需要考虑到SF中进行排查。这块也有遇到相关案例0大小窗口创建一个大小为0的PopupWindow导致实际不显示窗口被遮挡第三方应用创建一个有焦点的窗口但位于屏幕之外InputDispatcher自身原生逻辑有bug在SF阶段也排查发现焦点图层窗口正常后但InputDispatcher还是没有对应焦点窗口这个时候大家可以可以去input源码中进行排查也有遇到过input中对于这块焦点变化处理有时序问题的情况。比如应用界面显示较晚input中并发时序问题焦点窗口设置后未触发再次计算其他上面No Focused Window ANR是一些可以归类的都归类了也有很多是不可以归类的具体有如下一些案例底层问题导致Render线程卡住绘制耗时锁屏逻辑异常导致锁屏时应用可见可操作一些公司的性能优化策略导致Activity启动被拦截上一个Activity报ANR第三方频繁crash导致框架卡顿CPU调度策略限核导致算力不足导致应用和框架都耗时原文地址https://mp.weixin.qq.com/s/siXDo1qEZTCyql2F0RmZnA更多framework手把手教你实战干货请关注下面“千里马学框架”

更多文章