Android视图:在设置可见性之前检查可见性可以提高性能吗

时间:2013-03-01 18:56:27

标签: android performance android-view

我有辅助方法,根据传递给方法的状态变量设置某些View的可见性。有时,这些方法会被多次调用,View的可见性不会改变。所以我发现自己开始检查每个View的可见性,然后用思考来设置它,"没有必要将View的可见性更改为相同的可见性并导致刷新没理由"

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

但是,现在我想知道setVisibility的实施是否已经考虑到这一点,并检查您是否设置了与View已有的相同的可见性,并且没有&# 39;不必要地刷新View(我的代码试图做的)。

所以有人知道我的"优化"实际上是在提高性能,还是API已经领先于我?

1 个答案:

答案 0 :(得分:47)

他们已经领先一步了。请参阅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;
    }
    ....
} 

检查标志是否与当前状态匹配。如果是这样,它只是在没有做任何事情的情况下返回。