Android 开发做到一定年限,Framework 是绕不开的。面试里 Handler、Binder 的出现频率越来越高,实际排查线上问题也经常需要理解系统启动和跨进程通信。这里记录了我学习 Framework 时梳理的模块和顺序,算是一个学习路线参考。
从整体上看,Android 系统分为三层:Linux 内核层、Android 系统服务层、以及 Zygote 进程模型。了解 init.rc 和 Zygote 的启动过程,可以帮助你理解应用进程是怎么创建的。这部分内容通常对应面试题里关于系统启动流程的问题。
接着是 IPC 通信。Binder 是 Android 的进程间通信基石,驱动向应用暴露了跨进程调用的能力。日常开发中,无论是系统服务(电话、闹钟)还是我们自己写的 WebView、视频播放等都依赖跨进程通信。理解 Binder 的实现有助于定位一些莫名其妙的调用失败。
Handler 是应用层最常用的消息机制,但它的源码很有意思。掌握了 message 如何入队、Looper 如何循环,再遇到卡顿或 ANR,分析起来会更从容。这部分面试常问,所以我也列了一些常见问题。
AMS 和 WMS 是系统服务的大头。AMS 负责 Activity、Service、Broadcast 等组件的生命周期管理,WMS 负责窗口管理和显示。理解它们的通信方式(还是基于 Binder)以及启动流程,能够解释很多 app 启动慢的问题。
显示相关的模块包括 Surface 和 SurfaceFlinger。Surface 是画布的抽象,SurfaceFlinger 负责合成各个 Surface 并送显。Android 12 的 SurfaceFlinger 改动不小,所以单独列出来。还有 PKMS(Package Manager Service),它掌管 APK 的安装、权限管理。静默安装、权限请求流程在日常开发中也经常碰到。
输入事件处理由 InputManagerService 负责,DisplayManagerService 则处理屏幕的亮灭、亮度调节等问题。这两个模块相对进阶,但遇到黑屏、触摸失灵等疑难杂症时,就派上用场了。
以上几个模块拆成了独立章节,每个章节包含源码分析、关键流程和可能会问到的面试题。学习的时候不一定按顺序来,但我个人倾向先搞定 Binder 和 Handler,因为它们贯穿全场。


