【问题标题】:Android Delay Time Performance - View visibility - should we check view visibility before setVisibility?Android 延迟时间性能 - 视图可见性 - 我们应该在 setVisibility 之前检查视图可见性吗?
【发布时间】:2016-03-12 06:52:56
【问题描述】:

基于输入数据,我的布局将显示一些视图并隐藏一些其他视图。 那么我应该在setVisibility() 之前使用getVisibility() 检查它们的可见性吗?

在延迟时间性能方面什么会更好?

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

【问题讨论】:

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


    【解决方案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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-25
      • 2015-02-10
      • 2015-02-25
      • 1970-01-01
      • 2013-04-17
      相关资源
      最近更新 更多