欢迎光临
我们一直在努力

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

    赞(0)
    未经允许不得转载:171主机测评 » Android随笔-Framework
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址