更多关于Android渲染性能请点击这里
Display List
Android绘制图像前,将xml文件转化为GPU可识别的文件,然后进行屏幕渲染,这一过程需要借助一个内部对象 Display List来实现

DisplayList持有所有将要交给GPU绘制到屏幕上的数据信息。它包含了一个列表,上面有任何可能用到的GPU资源,还有一个列表,包含了渲染的时候执行OpenGL所需的所有命令
View与Display List
在某个View第一次需要被渲染时,会创建Display List,当这个View要显示到屏幕上时,通过提交绘图命令至GPU来执行显示列表。

如果View的Property属性发生了改变(例如移动位置),我们就仅仅需要再次执行 Display List就够了。

如果你修改了View中的某些可见组件的内容,那么之前的Display List可能不再有效,
因此,我们需要重新创建一个Display List并重新执行渲染指令从而在屏幕上更新。

请注意:每次View的绘制内容更改时,都会重复Display List的生成,执行渲染Display List,更新到屏幕上的过程。这个流程的表现性能取决于你的View的复杂程度。
View的可视性变化会对渲染途径产生影响。
举个例子,假设某个Button的大小需要增大到目前的两倍,在增大Button大小之前,需要通过父View重新计算并摆放其他子View的位置。修改View的大小会触发整个HierarcyView的重新计算大小的操作。如果是修改View的位置则会触发HierarchView重新计算其他View的位置。如果布局很复杂,这就会很容易导致严重的性能问题。

这些类型的可视化更改要求,当size发生改变,measure浏览所有层级要求每一个视图提供新的大小,如果你改变了位置,要requestLayout(),或者一个ViewGroup重置了他的子集,layout也会启动,计算出各个层级,每个view应该被放在何处,每个阶段都需要时间来运行,当大量view边无效或者更改时,就会造成巨大的性能损耗。
布局失效最小化 是提升渲染系统整体性能的很好的办法