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

Ste*_*yle 19 performance android android-view

我有帮助方法,View根据传递给方法的状态变量设置某些s 的可见性.有时,这些方法会被多次调用,并且View可见性不会改变.所以我发现自己开始检查每个人的可见性,View然后再按照以下思路进行设置:"没有必要将View的可见性更改为相同的可见性并无缘无故地刷新".

            if (myView.getVisibility() != View.VISIBLE) {
                myView.setVisibility(View.VISIBLE);
            }
            etc...
Run Code Online (Sandbox Code Playgroud)

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

那么有人知道我的"优化"是否实际上提高了性能,还是API已经领先于我?

Geo*_*its 47

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

public void setVisibility(int visibility) {
    setFlags(visibility, VISIBILITY_MASK);
    ...
}
Run Code Online (Sandbox Code Playgroud)

它叫setFlags():

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

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

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

  • 我正要创建类似的标志..很幸运看到你的回答。 (2认同)