在具有相同drawable id的文本视图上调用setBackground两次。怎么了?

时间:2014-01-15 04:11:13

标签: android performance view android-view

我有一个文本视图和一个drawable。 如果我使用相同的drawable id设置textview的背景两次(没有特殊原因),我想知道它是否会导致任何性能损失。

我知道android会遍历每个视图的整个measure-layout-draw传递(http://developer.android.com/guide/topics/ui/how-android-draws.html),每次我们调用它上面的任何set方法,比如setText,setBackground等。

我想知道,以防万一我不小心调用setBackground两次,使用相同的drawable,将android经历两次整个drawaing循环,导致性能损失,或者这是由android优化,就像android记得我我设置的背景与之前设置的相同,所以不需要经历绘图周期吗?

如果有人知道这个领域,请帮助!

1 个答案:

答案 0 :(得分:3)

答案在于View类的源代码。

setBackgroundResource()实施此检查:

if (resid != 0 && resid == mBackgroundResource) {
     return;
}

setBackgroundDrawable()(由setBackground()调用)检查引用,如果它们指向同一个Drawable则不执行任何操作

if (background == mBackground) {
     return;
}

因此,如果您在调用setBackground()时使用相同的引用/相同资源ID,则不应导致性能下降,因为Android不会重做整个可绘制设置过程。