外观
一个 Button 从创建到真正显示在屏幕上 完整链路是什么?
标准回答
布局加载后,Button 被加入 Activity 的 View 树。ViewRootImpl 在需要更新时安排 traversal,由 Choreographer 在对应帧执行测量、布局和绘制。measure 决定尺寸,layout 决定位置,draw 组织绘制内容;ViewGroup 通过 dispatchDraw 绘制子 View。硬件加速下,应用主线程更新 RenderNode 等绘制记录,RenderThread 驱动渲染并生成窗口缓冲区。缓冲区经图形缓冲传递机制交给 SurfaceFlinger,SurfaceFlinger 根据图层位置和遮挡进行合成,再由 HWC 和显示设备呈现。Button 通常和其他普通 View 一起绘入窗口内容,并不独占一个 SurfaceFlinger 图层。
延伸追问
onDraw 或 draw 返回只能说明应用侧相应工作完成,不能作为屏幕已经显示的证据。
内容来源
- Android Framework 知识手册 · 原条目
2-3