基于Android7.1源码和相关资料画了APP UI绘制显示的大致框架。
涉及安卓系统全栈内容:
- APP层
- framework层(WMS)
- native层(SurfaceFlinger)
- HAL层(hwcomposer/gralloc)
包括了如下概念:
- 进程通信组建:binder/Ashmem,作为模块之间沟通的桥梁,如果不清楚这两个实现机制,很难明白UI渲染如何从APP层发起请求经过多个模块传递最终发送到显示设备显示。
- 图形学相关概念:Surface/Layer/Gralloc/HWComposer/Vsync/FrameBuffer以及Canvas/Paint/Bitmap。对于APP开发者,大多只了解Canvas/Paint/Bitmap,这三个概念可以理解是对底层显示机制的上层抽象,如果想弄清楚绘制的底层实现,需要进一步学习Surface/Layer/Gralloc/HWComposer/Vsync/FrameBuffer这几个概念。
- 渲染引擎:Skia/OpenGL。在了解了Surface等概念之后,需要明白如何将Surface按照设定的Layer层次渲染到显示设备,这时就需要用到渲染引擎。
主要相关代码地址:
app端: