Android随笔-Framework

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 层通过 SurfaceSurfaceControl 与其交互
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.soBpBinder(代理)与 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 的学习路径

  1. 应用层基础:先精通四大组件、Handler、自定义 View
  2. IPC 机制:理解 Binder 原理,能写 AIDL
  3. 系统服务:精读 AMS(Activity 启动流程)、WMS(窗口添加流程)、PMS(APK 安装流程)
  4. 图形与性能:理解 Choreographer、VSync、SurfaceFlinger 合成流程
  5. 源码阅读:下载 AOSP,配合断点调试(如 Android Studio 调试 system_server)

一句话:Android Framework 就是"让 App 能跑起来、能互相通信、能操作硬件、能在屏幕上显示出来"的一整套中间层。你平时调用的每一个 Context.startActivity(),背后都是 Framework 中多个服务协作的结果。

相关推荐
达达尼昂1 小时前
Flutter AI Harness 如何让 Agent 参与软件开发全流程
android·人工智能·后端
sRect1 小时前
用ESP32-S3开发板开发一个接收消息的BB机
android·serverless·嵌入式
AFinalStone2 小时前
Android 7系统无障碍服务(二)AccessibilityManagerService 启动与初始化
android·无障碍服务
小孔龙2 小时前
BufferQueue 多缓冲与背压
android
阿pin3 小时前
Android随笔-kotlin Flow
android·kotlin·flow
阳光予你3 小时前
App 启动流程:从 Launcher 点击到 Activity 创建
android
小孔龙3 小时前
BufferQueue 对象交接与同步
android
XiaoLeisj3 小时前
Kotlin Flow 常用操作符:数据变换 map、filter、onEach,时间控制 debounce、sample,终端聚合 reduce、fold
android·kotlin·android jetpack·协程·响应式编程·flow
EQ-雪梨蛋花汤4 小时前
Android 3D 开发教程(三):Sceneform-EQR 配置 PBR 材质、光照、相机与实时阴影
android·3d·材质