view.invalidate---viewparent.invalidateInparent---ViewRootImpl.invalidateInparent---ViewRootImpl.scheduleTraversals---Choreographer.postCallback
(vsync信号到来)---performTraversals--performDraw---draw---drawSoftware----- mSurface.lockCanvas mView.draw(canvas)
mSurface.lockCanvas dirty区域的canvas
但是这个surface是怎么绘制到屏幕上的呢 和硬件加速绘制的区别在哪?(看老罗的文章)
很简单,surface控制一块图形缓存区GraphicBuffer, 这块缓存区的数据被copy到系统帧缓存区,这块帧缓存区就是HAL层直接上屏的数据源。
只有调用invalidate的view才会擦除DRAWN标志,这样在整个view树中,只有它的ondraw方法才会被调用