更改太多布局的可见性可能会导致性能问题吗?
May changing the visibility of too many layouts a performance issue?
假设您有一个 FrameLayout
containing 10 LinearLayouts
,每次只有一个可见。
每个LinearLayout
is a complex view, containing Button
, EditText
, TextView
,等等
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/alice
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="visible">
<!-- complex stuff -->
</LinearLayout>
<!-- many more linear layouts... -->
<LinearLayout
android:id="@+id/juliett
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone">
<!-- last complex stuff -->
</LinearLayout>
</FrameLayout>
因此:
- 更改
LinearLayout
可见性以显示另一个项目,将是一个巨大的性能问题 ?
- 既然这是一个问题,为什么使用
ViewFlipper
不会降低应用程序的性能?
这不是一个好的实现方式,因为每次您需要显示另一个视图时,其他视图必须消失。因此,您将为它编写重复的代码行。 Viewswitcher 是更好的选择。那么性能呢?视图切换器将测量所有仅在其内部绘制的子视图。这个技巧使视图切换器更快,因为它不需要为自己重新计算尺寸,除非您禁用它以使用异构子视图。
İ如果您的视图是同质的,最好的方法是实现自定义视图并提供 class 以更改状态。例如,您将 Alice 对象设置为您的自定义视图以显示 Alice 的属性并根据您的业务逻辑以编程方式更改它。
祝你好运
埃姆雷
严重的是,对于上述情况,您需要考虑片段。
为什么要夸大不必要的观看次数。
这是不好的做法,因为代码很容易变得一团糟。忽略这一点并只关注性能,当您将可见性设置为 GONE
时,不会测量视图(它与 INVISIBLE
不同)。不过,该视图占用了一点内存。根据您的操作,考虑使用 ViewGroup.removeView()
.
没有基准很难说,但理论上它不应该有 性能 问题。
假设您有一个 FrameLayout
containing 10 LinearLayouts
,每次只有一个可见。
每个LinearLayout
is a complex view, containing Button
, EditText
, TextView
,等等
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/alice
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="visible">
<!-- complex stuff -->
</LinearLayout>
<!-- many more linear layouts... -->
<LinearLayout
android:id="@+id/juliett
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone">
<!-- last complex stuff -->
</LinearLayout>
</FrameLayout>
因此:
- 更改
LinearLayout
可见性以显示另一个项目,将是一个巨大的性能问题 ? - 既然这是一个问题,为什么使用
ViewFlipper
不会降低应用程序的性能?
这不是一个好的实现方式,因为每次您需要显示另一个视图时,其他视图必须消失。因此,您将为它编写重复的代码行。 Viewswitcher 是更好的选择。那么性能呢?视图切换器将测量所有仅在其内部绘制的子视图。这个技巧使视图切换器更快,因为它不需要为自己重新计算尺寸,除非您禁用它以使用异构子视图。
İ如果您的视图是同质的,最好的方法是实现自定义视图并提供 class 以更改状态。例如,您将 Alice 对象设置为您的自定义视图以显示 Alice 的属性并根据您的业务逻辑以编程方式更改它。
祝你好运
埃姆雷
严重的是,对于上述情况,您需要考虑片段。 为什么要夸大不必要的观看次数。
这是不好的做法,因为代码很容易变得一团糟。忽略这一点并只关注性能,当您将可见性设置为 GONE
时,不会测量视图(它与 INVISIBLE
不同)。不过,该视图占用了一点内存。根据您的操作,考虑使用 ViewGroup.removeView()
.
没有基准很难说,但理论上它不应该有 性能 问题。