23

View我有帮助方法,根据传递给方法的状态变量设置某些 s 的可见性。有时,这些方法会被多次调用,并且View可见性不会改变。因此,我发现自己开始检查每个视图的可见性,View然后再考虑“将视图的可见性更改为相同的可见性并无缘无故地导致刷新”,这是毫无意义的

            if (myView.getVisibility() != View.VISIBLE) {
                myView.setVisibility(View.VISIBLE);
            }
            etc...

但是,现在我想知道是否setVisibility已经考虑到了这一点,并检查您是否对View已经拥有的内容设置了相同的可见性,并且没有不必要地刷新View(我的代码正在尝试做的事情)。

那么有谁知道我的“优化”是否真的提高了任何性能,或者 API 是否已经领先了我一步?

4

1 回答 1

50

他们已经领先了一步。请参阅以下代码View.java:setVisibility()

public void setVisibility(int visibility) {
    setFlags(visibility, VISIBILITY_MASK);
    ...
}

它调用setFlags()

void setFlags(int flags, int mask) {
    int old = mViewFlags;
    mViewFlags = (mViewFlags & ~mask) | (flags & mask);

    int changed = mViewFlags ^ old;
    if (changed == 0) {
        return;
    }
    ....
} 

它检查标志是否与当前状态匹配。如果是这样,它只是简单地返回而不做任何事情。

于 2013-03-01T19:02:43.740 回答