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 中多个服务协作的结果。

相关推荐
千里马学框架2 天前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台2 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone2 天前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
致远ccc2 天前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
ttyyttemo2 天前
Kotlin 协程中的 Job 结构化并发与取消
android
sun0077002 天前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android
其实防守也摸鱼2 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
AFinalStone2 天前
Android7 SystemUI 源码解析(四)NavigationBar 导航栏与 SystemBars
android·systemui
JMchen2 天前
属性动画原理与高级动画实现
android·kotlin·canvas
AFinalStone2 天前
Android7 SystemUI 源码解析(二)启动流程深度解析
android·systemui