学习路线
2026/7/23大约 2 分钟
学习路线
开始学习解决“先读哪几篇”,本页解决“每篇应该怎么读、怎样证明自己真的理解了”。
不要按类名背源码
读一篇 Framework 教程时,先画四列:
| 观察维度 | 需要回答的问题 |
|---|---|
| 系统层 | 当前是 App API、Java 系统服务、Native 服务还是内核? |
| 进程 | 代码运行在 App、system_server、独立服务还是内核空间? |
| 线程 | 当前是主线程、Binder 线程、Handler 目标线程还是其他线程? |
| 证据 | 哪段源码、日志、dump 或 trace 能证明结论? |
类名会随版本调整,这四个问题更容易迁移到新的 Android 版本。
一篇文章读三遍
第一遍:只看地图
先看文章开头的问题、主流程图和结论,能复述每个角色负责什么即可。不要在第一个陌生方法处停住。
第二遍:追关键节点
打开相同 Android tag 的源码,只追当前文章声明的主链。每遇到 Binder、Handler、JNI 或系统调用, 就在图上标出边界。
第三遍:用设备验证
运行文章提供的命令,保存原始输出,再把日志字段、dump 对象或 trace slice 对回源码。无法验证的 结论标成疑问,不要用记忆补齐证据。
建议的笔记格式
每篇只保留一页笔记:
- 这套机制解决什么问题。
- 一条不超过十个节点的主链。
- 三个关键对象及其职责。
- 两个容易混淆的边界。
- 一组可复现的验证命令。
- 一个仍未解决的问题。
毕业练习
以一次 Activity 冷启动为例:
- 画出 App 进程、
system_server、Zygote 和目标进程。 - 标出
startActivity()、Binder 服务入口、启动决策、进程创建、生命周期事务、加窗和首帧。 - 标出 Binder 线程与应用主线程的切换位置。
- 使用
am start -W、dumpsys activity activities和dumpsys window windows保存证据。 - 解释“Activity 已创建”“窗口已注册”和“首帧已显示”为什么是三个不同的完成点。
如果能脱离文章完成这张图,并指出每个判断的证据来源,就可以按兴趣进入专题地图。
之后如何选择专题
- 想理解 App 生命周期:继续 AMS、WMS 与输入系统。
- 想排查卡顿和稳定性:学习 Perfetto、ANR、帧时间线与内存。
- 想做 ROM 或系统定制:学习 PMS、权限安全、overlay 与大屏窗口。
- 想继续向下追:学习 SurfaceFlinger、ART、Native 服务与内核。
不要同时开太多专题。每次选择一个真实问题,沿正常主链建立检查点,再进入下一组内容。