Android相机拍完照跳转进大图链路拆解
实际是一条跨进程、跨系统服务、跨渲染链路:
相机点击抬手 → 相机处理缩略图点击 → 确认刚拍照片/Uri/Intent → startActivity → system_server ActivityTaskManager/WindowManager 启动图库 → 图库进程冷启动 → 图库 Application / Activity / 页面初始化 → 查询/解码/加载大图或占位图 → 首次布局绘制 → RenderThread 提交 Buffer → SurfaceFlinger 合成显示 → 屏幕出现第 1 幅动态画面
一、关键时间点
统一用 Perfetto + Trace 打点,把链路拆成以下时间点:
时间点 | 阶段 | 说明 |
|---|---|---|
| 相机 ACTION_UP | 用户手指抬起,测试定义的起始帧 |
| 相机缩略图 click 开始 | Camera 代码进入左下角缩略图点击逻辑 |
| 相机拿到目标图片 Uri | 刚拍照片是否已经保存、MediaStore 是否 ready |
| 相机调用
| Intent 发给系统 |
| system_server 收到启动请求 | ActivityTaskManager 处理启动图库 |
| 图库进程 fork | 后台无图库时,Zygote 创建图库进程 |
| 图库
| 图库进程初始 |