Android Framework 是 Android 系统的骨架和神经系统 ,它向上为 App 提供 Java/Kotlin API,向下通过 JNI 调用 Native 层(C/C++)和 Linux 内核。你可以把它理解为"系统服务的集合 + 应用运行时的支撑环境"。
一、四大组件管理框架
这是 Framework 最核心的职责,对应源码主要在 frameworks/base/services/core/java/com/android/server/am/ 和 frameworks/base/core/java/android/app/。
| 组件 | Framework 管理内容 |
|---|---|
| Activity | 生命周期调度、任务栈(TaskRecord/ActivityRecord)、启动模式、Intent 解析、窗口与 AMS 交互 |
| Service | 启动/绑定流程、Service 生命周期、前台 Service 通知、ANR 监控(主线程 20 秒未响应) |
| BroadcastReceiver | 有序/无序广播分发、粘性广播(已废弃)、静态注册(Manifest)与动态注册(Context)的区别 |
| ContentProvider | 跨进程数据共享、URI 权限管理、CRUD 操作封装、SQLite 封装 |
Activity 启动流程 贯穿了 AMS、WMS、PMS、Binder 等多个模块。
二、系统服务(System Services)
运行在 system_server 进程中,通过 ServiceManager 注册,App 通过 Context.getSystemService() 获取代理。
核心服务一览
| 服务 | 类名 | 职责 |
|---|---|---|
| AMS | ActivityManagerService |
四大组件调度、进程管理、内存回收、ANR 检测 |
| WMS | WindowManagerService |
窗口层级(Z-order)、尺寸、位置、动画、输入事件分发 |
| PMS | PackageManagerService |
APK 安装/卸载/解析、权限管理、组件信息查询 |
| IMS | InputManagerService |
输入事件(触摸/按键)采集、分发到窗口 |
| NMS | NotificationManagerService |
通知渠道、通知显示/取消、勿扰模式 |
| AlarmManagerService | - | 定时任务管理,设备休眠时的唤醒逻辑 |
| JobSchedulerService | - | 后台任务调度(网络可用/充电时执行) |
| BatteryStatsService | - | 电量统计,各应用 CPU/网络/唤醒锁耗电计算 |
| VibratorService | - | 震动控制 |
| SensorService | - | 传感器(加速度计、陀螺仪等)数据聚合与分发 |
三、窗口与图形系统
| 模块 | 内容 |
|---|---|
| WindowManager | 窗口的添加、更新、移除;Token 机制(验证窗口合法性);窗口类型(Application/SubPanel/System/Toast) |
| SurfaceFlinger | Native 层服务,负责合成所有 Surface 并输出到屏幕;Framework 层通过 Surface 和 SurfaceControl 与其交互 |
| View 系统 | View / ViewGroup / ViewRootImpl 的测量、布局、绘制流程;invalidate() / requestLayout() 机制 |
| Choreographer | 接收 VSync 信号,统一调度动画、输入、绘制,保证帧率同步 |
| HWUI / Skia | 硬件加速渲染(OpenGL ES)与软件渲染(Skia 图形库) |
| SurfaceView / TextureView | 独立 Surface 的视频渲染方案,与主窗口渲染线程分离 |
四、Binder IPC 机制
Android Framework 的通信基石,所有跨进程调用都基于它。
| 层级 | 内容 |
|---|---|
| 内核层 | Binder 驱动(/dev/binder),实现内存映射和线程池管理 |
| Native 层 | libbinder.so,BpBinder(代理)与 BBinder(实体) |
| Framework 层 | IBinder 接口、Binder 类、Parcel 序列化、AIDL 自动生成 Stub/Proxy |
| ServiceManager | 系统服务的"黄页",管理所有 Binder 服务的注册与查询 |
五、资源管理系统
| 模块 | 内容 |
|---|---|
| AssetManager | 读取 APK 中的 assets/ 目录资源(原始文件) |
| Resources | 管理 res/ 目录下的结构化资源,支持多语言/多密度/多主题 |
| Resource.arsc | 编译后的资源索引表,运行时通过 ID(R.java)快速查找 |
| 主题与样式 | Theme 的继承与叠加,TypedArray 属性解析 |
| Configuration | 系统配置变化监听(语言、屏幕方向、深色模式) |
六、输入系统
| 模块 | 内容 |
|---|---|
| EventHub | Native 层读取输入设备(触摸屏、按键、遥控器)的 /dev/input/eventX |
| InputReader | 解析原始事件,进行坐标转换、手势识别(多点触控) |
| InputDispatcher | 将事件分发给目标窗口,通过 WMS 找到焦点窗口 |
| View 事件分发 | dispatchTouchEvent() → onInterceptTouchEvent() → onTouchEvent() 责任链 |
七、多媒体框架
| 模块 | 内容 |
|---|---|
| MediaPlayer | 封装 MediaPlayerService(Native),支持本地/网络音视频播放 |
| MediaCodec | 硬编解码接口(OMX / Codec2 框架),直接操作 DSP |
| MediaRecorder | 录音录像封装 |
| Camera2 API | 相机 HAL3 封装,支持 RAW、手动对焦、多摄像头 |
| AudioManager | 音量控制、音频焦点(Audio Focus)、音频路由(扬声器/耳机/蓝牙) |
八、安全与权限框架
| 模块 | 内容 |
|---|---|
| PermissionManager | 运行时权限申请/授予/撤销(Android 6.0+) |
| AppOpsManager | 更细粒度的操作权限(如读取通讯录、使用摄像头),用于权限审计 |
| Keystore | 密钥安全管理,硬件加密(TEE/SE) |
| SELinux | 强制访问控制(MAC),通过 sepolicy 限制进程可访问的资源 |
| Signature 验证 | APK 签名 v1/v2/v3/v4 的 Framework 层校验逻辑 |
九、系统启动与运行时
| 模块 | 内容 |
|---|---|
| Zygote | 应用进程孵化器,预加载类和资源,通过 fork() 快速创建 App 进程 |
| SystemServer | 系统服务的"大管家",启动并运行 AMS/WMS/PMS 等所有核心服务 |
| Runtime (ART) | Android 运行时,负责 AOT 编译、GC、JIT、Profile-guided 优化 |
| Looper / Handler | 线程消息循环机制,MessageQueue + epoll 实现异步消息处理 |
十、Framework 源码目录速查
如果你想看 AOSP 源码,关键目录对应关系如下:
frameworks/base/
├── core/java/android/ # 应用层 API(Context、Activity、View 等)
├── services/ # 系统服务实现
│ ├── core/java/com/android/server/am/ # AMS
│ ├── core/java/com/android/server/wm/ # WMS
│ └── core/java/com/android/server/pm/ # PMS
├── libs/ # Framework 库(如 hwui)
├── media/ # 多媒体框架
├── graphics/ # 图形相关(Canvas、Bitmap)
├── location/ # 定位服务
├── wifi/ # WiFi 服务
└── packages/ # 系统应用(Settings、SystemUI)
十一、总结
Framework 的学习路径
- 应用层基础:先精通四大组件、Handler、自定义 View
- IPC 机制:理解 Binder 原理,能写 AIDL
- 系统服务:精读 AMS(Activity 启动流程)、WMS(窗口添加流程)、PMS(APK 安装流程)
- 图形与性能:理解 Choreographer、VSync、SurfaceFlinger 合成流程
- 源码阅读:下载 AOSP,配合断点调试(如 Android Studio 调试 system_server)
一句话:Android Framework 就是"让 App 能跑起来、能互相通信、能操作硬件、能在屏幕上显示出来"的一整套中间层。你平时调用的每一个 Context.startActivity(),背后都是 Framework 中多个服务协作的结果。