【问题标题】:Removing or Adding views vs ViewStub删除或添加视图与 ViewStub
【发布时间】:2016-09-14 01:10:50
【问题描述】:

.remove() .addView() 和使用 ViewStub 有什么区别? ViewStub 如何提高布局渲染效率?

【问题讨论】:

    标签: android layout view viewstub


    【解决方案1】:

    正如您在this article 中看到的那样,当您使用ViewStub 时,除非需要(将存根的可见性设置为VISIBLE 或调用@ 987654330@)。 优点是,包含的视图都不会成为视图层次结构的一部分,因此您的视图更轻。

    看这个例子: ViewStub 未膨胀:

    充气后:

    当然,您在这里需要权衡,当您设置 VISIBLE(或 show())时,会发生重新膨胀(仅在 ViewStub 布局上)。

    【讨论】:

    • 感谢您的回答。我也找到了这篇文章。如果我动态删除()视图和 .addView()会发生什么。删除而不是使用 ViewStub 时,它也会删除内存。是不是一样的想法?
    • 你是对的,它确实从内存中删除了整个视图。问题在于添加和删除视图的性能,这是一项昂贵的操作。这就是 Google 创建 ViewStub 的原因,它更轻量,因为您只是在扩展视图层次结构的一部分,而不是全部。
    • 谢谢大家。 Leonardo Ferrari
    • 当然,很高兴我能帮上忙!
    • 你好,我知道这是旧的,但这里的性能权衡是什么?我问的原因是我有一位同事希望我将我的实现更改为不使用视图存根,而是动态删除/添加视图。
    【解决方案2】:

    ViewStub 在性能上与添加 View 相同。看看 ViewStub.inflate()。它的作用是动态添加视图。

    public View inflate() {
        ...
        final View view = factory.inflate(mLayoutResource, parent,
                false);
        ... 
        parent.addView(view, index, layoutParams);
        } else {
            parent.addView(view, index);
        }
        ...
        return view;
    }
    

    https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/view/ViewStub.java

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-26
      • 1970-01-01
      • 1970-01-01
      • 2014-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多