Java 在性能方面,哪个更好:foo.setVisibility(View.go)或parent.removeView(foo)?

Java 在性能方面,哪个更好:foo.setVisibility(View.go)或parent.removeView(foo)?,java,android,performance,Java,Android,Performance,我一直在搜索相关论坛,但没有一个(目前)详细说明这些组合方法中的哪一个foo.setVisibility(View.VISIBLE)+foo.setVisibility(View.GONE) 而parent.addView(foo)+parent.removeView(foo)在性能或能耗方面更好…测量了不可见视图,但未绘制。过去的景色是不可测量的。因此,性能略有不同。测量了不可见视图,但未绘制。过去的景色是不可测量的。因此,性能略有不同。

我一直在搜索相关论坛,但没有一个(目前)详细说明这些组合方法中的哪一个
foo.setVisibility(View.VISIBLE)
+
foo.setVisibility(View.GONE)

parent.addView(foo)
+
parent.removeView(foo)
性能或能耗方面更好…

测量了不可见视图,但未绘制。过去的景色是不可测量的。因此,性能略有不同。

测量了不可见视图,但未绘制。过去的景色是不可测量的。因此,性能略有不同。

+
foo.setVisibility(View.GONE)
优先于
parent.addView(foo)
+
parent.removeView(foo)
,如果您想经常显示/隐藏

foo.setVisibility(View.VISIBLE)
+
foo.setVisibility(View.GONE)
优先于
parent.addView(foo)
+
parent.removeView(foo)
,如果您想经常显示/隐藏

这取决于您的实现。但在大多数情况下,这并不重要

您的自定义
视图
可能有一个“巨大”构造函数,或者某些方法使用时间/处理器消耗的计算超载

尽管如此,在常规视图的情况下(例如
TextView
),它实际上并不重要


如果可见性状态为gone,则不会使用此视图的任何方法。布局渲染时,此视图将被忽略。

这取决于您的实现。但在大多数情况下,这并不重要

您的自定义
视图
可能有一个“巨大”构造函数,或者某些方法使用时间/处理器消耗的计算超载

尽管如此,在常规视图的情况下(例如
TextView
),它实际上并不重要


如果可见性状态为gone,则不会使用此视图的任何方法。布局渲染时,此视图被忽略。

与添加和删除视图相比,绝对可见和消失更好

1) 正如其他人所说,它肯定比实际删除和添加视图具有更好的性能

但我认为下一点更重要


2) 即使在视图上执行了一个操作,您仍然可以使用视图(getText或setText)等执行很多操作,但是如果您删除和添加视图,视图本身就不存在,阻止您使用它执行任何操作与添加和删除视图相比,绝对可见和消失更好

1) 正如其他人所说,它肯定比实际删除和添加视图具有更好的性能

但我认为下一点更重要



2) 即使在视图上执行了GONE操作,您仍然可以使用视图(getText或setText)等执行很多操作,但是如果您删除并添加视图,视图本身就不存在,从而阻止您使用它执行任何操作。

使用视图。在不消耗大量内存的视图上执行GONE操作(如TextView)并使用parent.removeView(视图)在内存大的视图上(如WebView)

使用view.GONE在不消耗大量内存的视图上(如TextView)并使用parent.removeView(视图)在内存大的视图上(如WebView)

不是我的否决票,而是
不可见的
消失的
做了非常不同的事情。前者将布局项保留在实际布局中,但不可见,而后者则完全删除该项。我猜,您使用哪一个将取决于您的用例,而不是性能。显然,如果您删除视图,它将不会成为布局的一部分,而且“性能更高”,但这只在列表元素中才真正重要。请记住:过早的优化是万恶之源。谢谢你的回答,@TimBiegeleisen:)你是对的。用例是决定因素。那么,addView()/removeView在我项目的一部分中获胜。不是我的下票,而是
INVISIBLE
goed
做非常不同的事情。前者将布局项保留在实际布局中,但不可见,后者将完全删除该项。我的猜测是,您使用的是您的用例,而不是性能。显然,如果您删除一个视图,它将不会成为布局的一部分,而且“性能更高”,但这只在列表元素中才真正重要。请记住:过早优化是万恶之源。感谢您的回复,@TimBiegeleisen:)你说得对。用例是决定因素。那么,addView()/removeView在我项目的一部分中获胜。。我问的是setVisibility()与addView()/removeView的区别。不是视图。不可见与视图。消失:)嗯。。我问的是setVisibility()与addView()/removeView的区别。不查看。不可见与查看。消失:)感谢您的输入!:)谢谢你的意见!:)非常感谢你的意见:)你说得对。这一切都是关于实施的,是个案对个案的基础。最后,在我正在处理的项目的一部分中,我将使用addView/removeView。我将需要基于事件的方法,此外,它将使我的CustomView承担通常由片段承担的角色。非常感谢您的输入:)您是对的。这一切都是关于实施的,是个案对个案的基础。最后,在我正在处理的项目的一部分中,我将使用addView/removeView。我将需要基于事件的方法,此外,它将使我的CustomView承担通常由片段承担的角色。感谢您的回复。:)谢谢您的回复。:)最后,这是一个个案对个案的基础。一个比另一个有优势,反之亦然。如果您想频繁地从一个视图跳到另一个视图,并且视图较小,我的做法是
setVisibility()
更好
addView()
+
removeView