gpt4 book ai didi

performance - ViewStub 和 View 之间有什么区别吗?

转载 作者:行者123 更新时间:2023-12-04 08:29:20 25 4
gpt4 key购买 nike

我是 Android 开发的新手。
我从 https://developer.android.com/training/improving-layouts/loading-ondemand.html 了解到 ViewStub

它提到使用它便宜且内存更少。

我有以下几点:

主布局.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/Layout1"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:background="@color/blue"
android:orientation="vertical" >

.....

.....

<Button android:id="@+id/ShowBackground"
android:layout_width="fill_parent"
android:layout_height="wrap_content"

<Button android:id="@+id/ShowBackground2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"

android:layout_alignParentBottom="true"
android:text="@string/title_close" />

<View
android:id="@+id/ShowView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@color/blue" />

<ViewStub
android:id="@+id/ShowViewStub"
android:layout="@layout/test"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone" />

</RelativeLayout>

测试文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ShowViewLayout"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:background="@color/blue_dimmer"
android:orientation="vertical" >

</RelativeLayout>

主要事件:
    private ViewStub mViewStub;
private View mView;
private Button mBackground1;
private Button mBackground2
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.MainLayout);

mView = (ViewStub) findViewById(R.id.ShowView);
mViewStub = (ViewStub) findViewById(R.id.ShowViewStub);
mBackground1 = (Button)this.findViewById(R.id.ShowBackground);

mBackground1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mView.setVisibility(View.VISIBLE);
}
});
}

mBackground2 = (Button)this.findViewById(R.id. ShowBackground2);
mBackground2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mViewStub.setVisibility(View.VISIBLE);
}
});
}

问题:

View 和 ViewStub 在 MainActivity 中工作正常。

我确实理解 ViewStub 对很少使用的 View 很有用。
如果在 MainActivity 中至少调用了 1 次 ViewStub,那么由于 test.xml 布局被添加到事件中,它不应该是更多的内存使用吗?

正如我所看到的,除非它被称为 View.Gone,否则 ViewStub 总是可见的......

有人可以解释一下两者之间的区别吗?

我非常感谢您的帮助,

谢谢你。

最佳答案

< include/> 只会将 xml 内容包含在您的基本 xml 文件中,就好像整个事情只是一个大文件一样。这是在不同布局之间共享布局部分的好方法。

< ViewStub/> 有点不同,因为它不是直接包含的,只有在您实际使用/需要它时才会加载,即当您将其可见性设置为 VISIBLE(实际可见)或 INVISIBLE(仍然不可见,但它的大小不再是 0)。这是一个很好的优化,因为您可以拥有一个复杂的布局,在任何地方都有大量的小 View 或标题,并且您的 Activity 加载速度仍然非常快。一旦您使用这些 View 之一,它将被加载。

关于performance - ViewStub 和 View 之间有什么区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28906304/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com