Android屏幕绘制架构如下图,本章主要就是讲这张图。
首先android的APP创建一个窗口(Surface空壳对象),然后调用WindowManager的方法向WMS服务发送创建窗口的请求,WMS收到WindowManager的请求会通过Surface的JNI调用到SurfaceFlinger_client驱动,该驱动请求SurfaceFlinger服务创建一段屏幕内存缓冲区,然后把内存缓冲区地址传递给WMS,WMS用该地址初始化APP中闯入的Surface对象。Surface是一个窗口代表一个平面,应该是一段数据,而绘制属于操作,android中使用SKia的图形库来完成绘制。
当然,可以使用C程序直接调用SurfaceFlinger_client驱动来请求SurfaceFlinger服务完成创建窗口,这样就可以越过WMS。