View.setVisibility(View.VISIBLE)是否强制视图重绘,即使它已经可见?

Ser*_*m's 3 optimization android view

我正在试图找出我的自定义视图的优化.我想知道调用View.setVisibility(View.VISIBLE)是否强制Android框架更新视图可见性(< - 强制视图重绘),即使视图已经可见.

Geo*_*its 5

不,它没有.

看看setVisibility():

public void setVisibility(int visibility) {
    setFlags(visibility, VISIBILITY_MASK);
    if (mBGDrawable != null) mBGDrawable.setVisible(visibility == VISIBLE, false);
}
Run Code Online (Sandbox Code Playgroud)

它只是调用setFlags(),如果没有任何变化立即返回:

....
int changed = mViewFlags ^ old;
if (changed == 0) {
    return;
}
Run Code Online (Sandbox Code Playgroud)

即使它(某种程度上)已经过去了,它也会检查各个标志是否发生变化,只有在其中一个标志不同时才会更新.