一、RelativeLayout的性能损耗
前面在讨论动画优化时,有提到低效率的动画实现往往都让代码充满了不确定性,比如requestLayout往往会造成一些意想不到的性能损耗。刚好最近在修改一个页面时,发现了一个跟预期不一样的bug,感觉可以跟大家分享一下。
我们都知道RelativeLayout在measure上是有性能损耗的,由于需要分别计运算元View在横、竖两个方向上的尺寸,在每次measure过程中,子View需要被measure两次,所以在使用RelativeLayout时,一定要控制布局的深度,减少嵌套的情况;但关于这个问题,我个人的认识一直停留在——由于View的measure是有重入保护的,对于在RelativeLayout中没有requestLayout的子View,即使重复调用measure也会直接返回才是。但在处理这个bug的过程中,发现实际情况跟想像中有所不同。
这个问题的场景是这样的,在某个列表页面,需要在顶部显示一个item的描述,当描述过长时,需要使用marquee效果来滚动显示;而底部有一个计数,随著item数量变化,数字会随之增加或减少。
写一个demo的话,效果和对应的布局文件如下,