一般一个Activity对应一个DecorView,一个DecorView对应一个ViewRootImpl,一个ViewRootImpl持有一个Surface,UI线程即创建ViewRootImpl所在线程。一个Surface持有一个Canvas,一个Canvas持有一个SkBitmap,SkBitmap里有绘制缓存区。
View绘制只能发生在UIThread。SurfaceView拥有单独的Surface,即单独的Canvas和绘制缓存区,绘制可发生在用户创建的子线程。
• Android UI的显示原理
vsync信号来了之后,通知应用去绘制,每个decoView对应一个ViewrootImpl对象,生成view Tree,Window再管理view的层级。应用向vsync申请绘制,在下一个信号来了之后,绘制到buffer,传递gbp到surfaceFlinger,还原buffer,并显示当前buffer的内容
• Surface的底层原理
通过gbp对应内存描述符,应用和系统对buffer一一对应