我有一个文本视图和一个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记得我我设置的背景与之前设置的相同,所以不需要经历绘图周期吗?
如果有人知道这个领域,请帮助!
答案 0 :(得分:3)
答案在于View
类的源代码。
setBackgroundResource()
实施此检查:
if (resid != 0 && resid == mBackgroundResource) {
return;
}
和setBackgroundDrawable()
(由setBackground()
调用)检查引用,如果它们指向同一个Drawable则不执行任何操作
if (background == mBackground) {
return;
}
因此,如果您在调用setBackground()
时使用相同的引用/相同资源ID,则不应导致性能下降,因为Android不会重做整个可绘制设置过程。