Invalidations, Layouts

更多关于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边无效或者更改时,就会造成巨大的性能损耗。

布局失效最小化 是提升渲染系统整体性能的很好的办法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值