笔记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或者内存很高

相关推荐
既然如此,那就开摆1 小时前
精读笔记06_CoCa
笔记
三品吉他手会点灯2 小时前
嵌入式机器学习 - 学习笔记1.1.1 - 什么是机器学习?
c语言·人工智能·笔记·嵌入式硬件·学习·机器学习
qq5752173192 小时前
Notepad++下载和安装
笔记·notepad++·记事本
换个昵称23 小时前
大模型学习8下-高性能推理引擎vLLM学习笔记
笔记·学习·vllm
LONGZHIQIN3 小时前
C#基础复习笔记
开发语言·笔记·c#
得闲喝茶3 小时前
跨表数据匹配——VLOOKUP、XLOOKUP
大数据·数据库·笔记·信息可视化·数据分析·excel
智慧景区与市集主理人5 小时前
巨有科技:市集笔记内容分发,低成本打造本地流量曝光矩阵
大数据·笔记·科技
IDIOSF5 小时前
Apple Notes Liberator:把 Apple Notes 里的笔记搬出来
笔记·其他
ljt27249606615 小时前
CPU:从底层电路到高性能执行架构
笔记
普普通通的一名码农6 小时前
TPS6120芯片说明
驱动开发·笔记·芯片手册