A
Air官方
ANR(应用无响应)是系统给应用下的最后通牒:主线程或输入通道超时没响应。这篇讲定位思路。
▍两套看门狗
系统从两个角度盯应用:任务超时(主线程的关键任务超时未完成)与输入超时(输入事件到达后应用长时间未响应)。两类 ANR 的报告与根因方向不同:任务超时多在生命周期回调里干重活(初始化、销毁时的清理);输入超时多在事件处理链上卡住(输入回调里做 IO、死锁)。报告里会标明类型,先分型。
▍第一证据:ANR 报告
报告含各线程栈(faultlog 篇的读法通用)。找卡点:主线程栈顶在干什么——等锁(找持锁者:遍历其他线程栈,谁持有它在干什么)、等 IO(什么文件的什么操作)、纯计算(算什么)。等待图:把线程间的等待关系画成图,成环即死锁,无环看最长链。
▍高频根因模板
一,主线程初始化重活(native 库的全量扫描、缓存同步重建——Air 系列的铁律场景:可重建缓存关同步落盘就是为它)。二,输入回调里的 IO(保存日志、写盘——输入热路径零 IO 铁律)。三,退出清理死锁(销毁序列里拿已销毁的锁——限时锁家族的解决方案)。四,跨线程回调姿势错(后台线程直接调界面接口,偶发卡死)。五,资源等待(等部署、等服务、等锁文件——超时缺失的同步等待)。
▍复现与验证
ANR 多为偶发:复现路径收集(用户操作序列)、压力场景构造(快速反复进出、低内存压力、慢存储模拟——设备 IO 慢时问题放大)。修复后的验证:原压力场景压测通过加三类基础手势回归(点击、滚动、拖拽——输入链改动的固定回归项)。
▍预防纪律
ANR 的预防就是三条架构纪律:主线程零阻塞、输入零 IO、跨线程回调走安全通道。修复历史 ANR 时对照检查违了哪条——每条铁律背后都是一串真实事故。
免费无广告的安装包可以在官网下载体验。
▍两套看门狗
系统从两个角度盯应用:任务超时(主线程的关键任务超时未完成)与输入超时(输入事件到达后应用长时间未响应)。两类 ANR 的报告与根因方向不同:任务超时多在生命周期回调里干重活(初始化、销毁时的清理);输入超时多在事件处理链上卡住(输入回调里做 IO、死锁)。报告里会标明类型,先分型。
▍第一证据:ANR 报告
报告含各线程栈(faultlog 篇的读法通用)。找卡点:主线程栈顶在干什么——等锁(找持锁者:遍历其他线程栈,谁持有它在干什么)、等 IO(什么文件的什么操作)、纯计算(算什么)。等待图:把线程间的等待关系画成图,成环即死锁,无环看最长链。
▍高频根因模板
一,主线程初始化重活(native 库的全量扫描、缓存同步重建——Air 系列的铁律场景:可重建缓存关同步落盘就是为它)。二,输入回调里的 IO(保存日志、写盘——输入热路径零 IO 铁律)。三,退出清理死锁(销毁序列里拿已销毁的锁——限时锁家族的解决方案)。四,跨线程回调姿势错(后台线程直接调界面接口,偶发卡死)。五,资源等待(等部署、等服务、等锁文件——超时缺失的同步等待)。
▍复现与验证
ANR 多为偶发:复现路径收集(用户操作序列)、压力场景构造(快速反复进出、低内存压力、慢存储模拟——设备 IO 慢时问题放大)。修复后的验证:原压力场景压测通过加三类基础手势回归(点击、滚动、拖拽——输入链改动的固定回归项)。
▍预防纪律
ANR 的预防就是三条架构纪律:主线程零阻塞、输入零 IO、跨线程回调走安全通道。修复历史 ANR 时对照检查违了哪条——每条铁律背后都是一串真实事故。
免费无广告的安装包可以在官网下载体验。
楼主
7 天前