2014-01-15 15 views
2

我有一个文本视图和一个drawable。 如果我使用相同的可绘制ID两次(无特定原因)设置textview的背景,我想知道它是否会导致任何性能损失。在具有相同可绘制标识的文本视图上调用setBackground两次。怎么了?

我知道Android穿过整个测量布局拉通为每个视图(http://developer.android.com/guide/topics/ui/how-android-draws.html),每一个我们呼吁任何一套方法,如的setText,的setBackground等

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

如果有人有这方面的知识,请帮忙!

回答

3

答案在于View类的源代码。

setBackgroundResource()实现这个检查:

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

setBackgroundDrawable()(被称为setBackground())检查引用和什么也不做,如果他们都指向同一个可绘制

if (background == mBackground) { 
    return; 
} 

因此,如果你是调用setBackground()时使用相同的参考资源/相同的资源ID,因为Android不会重新执行整个可绘制设置过程,所以不应产生性能损失。

相关问题