Android延迟时间性能 - 查看可见性 - 我们应该在setVisibility之前检查视图可见性吗?

时间:2015-12-07 15:41:00

标签: android performance android-view visibility delayed-execution

根据输入数据,我的布局会显示一些视图并隐藏其他视图。 因此,我应该在getVisibility()之前使用setVisibility()检查其可见度吗?

延迟时间表现会更好吗?

(我的布局有很多图片,它使活动之间的延迟时间很长。所以这就是我发布这个问题的原因)

1 个答案:

答案 0 :(得分:1)

始终检查来源。在这个例子中View.java

https://github.com/android/platform_frameworks_base/blob/master/core/java/android/view/View.java#L7424-L7425

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

致电setFlags

https://github.com/android/platform_frameworks_base/blob/master/core/java/android/view/View.java#L10538

这会检查标志是否已更改,如果它没有快速返回:

    ...
    int old = mViewFlags;
    mViewFlags = (mViewFlags & ~mask) | (flags & mask);

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

因此,尽管我在性能方面没有为您提供数字,但我认为这种差异可以忽略不计,因为如果将其设置为当前值,它就不会改变。

与此相反,getVisibility也没有做任何事情:

https://github.com/android/platform_frameworks_base/blob/master/core/java/android/view/View.java#L7413-L7415

public int getVisibility() {
    return mViewFlags & VISIBILITY_MASK;
}