笔记ANR原理

好,这里我给你一版 "面试官听了会点头的 ANR 原理回答" 。

这版回答有 结构、有原理、有细节、有工程认知 ,不啰嗦,也不浮夸,适合 中高级 Android 面试。


一、先给一句话版本(开场用)

ANR 本质上是系统在监控主线程响应能力,当主线程在规定时间内没有完成系统要求的关键事件处理,AMS 就会判定应用无响应并触发 ANR。

这句话先说出来,面试官基本就知道你不是小白。


二、展开说:ANR 是怎么被"判定"的(核心原理)

1️⃣ 谁在监控?

ActivityManagerService(AMS)在监控应用进程的主线程响应情况

它并不是看代码,而是看 "事件有没有被及时处理"。


2️⃣ 监控的是什么事件?

主要是这几类 必须及时完成的事件:

  • 输入事件(点击、按键)

  • Activity 生命周期回调

  • BroadcastReceiver.onReceive

  • Service 启动 / 绑定

  • ContentProvider 初始化


3️⃣ 判定机制是怎样的?

流程是:

  1. 系统把事件通过 Binder 投递给应用主线程

  2. AMS 开始计时

  3. 主线程必须在 规定时间内完成处理并返回

  4. 如果超时 → 判定 ANR

👉 是否超时才是关键,和你"在跑哪行代码"无关


三、不同场景的超时时间(体现你熟)

你可以挑 2~3 个说,不用全背:

  • 前台输入事件:5 秒

  • 前台 Broadcast:10 秒

  • 后台 Broadcast:60 秒

  • Service 启动:20 秒

  • ContentProvider onCreate:10 秒

面试官听到具体数字,基本就满意了。


四、为什么会 ANR(真正的技术本质)

因为 Android 是单线程 UI 模型,主线程一旦被阻塞,就无法处理系统事件

常见原因包括:

  • 主线程执行耗时操作(I/O、网络、复杂计算)

  • 主线程被锁阻塞(synchronized / Binder 调用)

  • Fragment / View 层级复杂导致 UI 渲染超时

  • 生命周期里做了太多工作


五、ANR 和 Crash 的区别(加分点)

对比项 ANR Crash
是否异常抛出 否 是
是否一定退出 否(用户可选) 是
本质 响应超时 未捕获异常
定位方式 traces + 时间线 堆栈

六、trace 为什么有时"不准"(高级理解)

traces.txt 只是 ANR 发生那一刻的线程快照,而 ANR 是一个"时间窗口问题"

所以:

  • 真正阻塞主线程的代码可能已经执行完了

  • trace 更应该用来看 线程状态和锁关系

  • 实际排查要结合日志、埋点、主线程耗时监控

这一段说出来,面试官会觉得你"真排过线上 ANR"。


七、最后用一句总结收尾(非常重要)

ANR 的根因只有一个:主线程在规定时间内无法响应系统事件。
所有表现形式,本质上都是主线程被占用或阻塞。


八、如果面试官追问「那你怎么排查 ANR?」

你只要接一句:

线上主要靠 traces 定位方向,再结合主线程耗时监控、关键路径埋点和多次 ANR 的共性分析来最终定位根因。

到这里,这一题基本就是 "满意甚至加分"

定位anr 先看trace文件确定是哪类

看log 给出了时间

过滤进程看看干了一些事情 能抓到一些蛛丝马迹

看下cpu usage和momery useage

看看是不是其他的app占用cpu或者内存很高

相关推荐
zhangrelay30 分钟前
机器人或计算机智能与时间相关案例汇总(ROS2-ROS1)
linux·笔记·学习·ubuntu·机器人
Neo Wordsworth1 小时前
随便笔记2
笔记
zhangrelay11 小时前
ROS项目设计案例智能大模型正经乱答案例
linux·笔记·学习·ubuntu·机器人
probex_11 小时前
学习笔记:知识图谱是什么,在测试里能干什么
笔记·学习·知识图谱
以为你知道啊12 小时前
90年代复古博客
笔记
波力海苔夹心脆67512 小时前
C# 值类型与引用类型详解:存储位置、赋值机制、参数传递、相等比较、装箱拆箱与常见陷阱
开发语言·jvm·经验分享·笔记·c#·.net
AOI小白新手上路14 小时前
从 Keil 调试视角看 51 指针,到 Cortex-M 内存映射访问寄存器 · 学习笔记
笔记·学习
坤坤子吖17 小时前
ELF加载、动态链接、GOT与PLT
linux·笔记·学习
hgfsjk17 小时前
野莓采集图片修改指南:从单张处理到批量优化
大数据·经验分享·笔记·其他
咖啡忍者17 小时前
【SAP BASIS】Section 11: SAP System Landscape
笔记