2017-06-13 34 views
0

我一直在寻找相关论坛上关于这一点,但没有一个(还)有详细其中这些组合方法foo.setVisibility(View.VISIBLE) + foo.setVisibility(View.GONE)parent.addView(foo) + parent.removeView(foo)性能或能耗方面更好的...在性能方面,哪个更好:foo.setVisibility(View.GONE)还是parent.removeView(foo)?

+3

不是我的失望,但'INVISIBLE'和'GONE'做了非常不同的事情。前者将布局项目保留在实际布局中,但不可见,后者完全删除该项目。我的猜测是,你的用例,而不是性能,将成为你使用哪一个的决定性因素。 –

+1

很明显,如果你删除了一个视图,它将不会是布局的一部分,并且是“更高性能”的,但是这只在列表元素中才有意义。 –

+2

请记住:不成熟的优化是所有邪恶的根源。 – Sweeper

回答

0

不可见视图是测量的但未绘制。没有测量过去的观点。所以有一个轻微的性能差异。

+0

嗯..我在这里问了setVisibility()与addView()/ removeView。不是View.INVISIBLE与View.GONE :) – Zarashi99

2

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

+0

感谢您的回应。 :) – Zarashi99

1

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

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

尽管如此,在通常的情况下(例如,TextView)它确实没有关系。

如果可见性状态等于消失,则不使用此视图的方法。而渲染这个视图的布局被忽略。

+0

非常感谢您的意见:) 你是对的。这是关于执行情况,这是一个案件的基础。 最后,在我正在开发的项目的一部分中,我将使用addView/removeView。我将需要基于事件的方法,此外,它使我的customviews承担Fragments通常采用的角色。 – Zarashi99

0

与添加和删除视图相比,绝对可见和无效更好。

1)像其他人所说的,它肯定比实际删除和添加视图

但据我来说是更重要的点下更好的性能

2)你仍然可以做很多事情与查看(getText或setText)等与视图,即使你对视图做了一个GONE,但如果它删除并添加视图,视图本身不存在,阻止你对它做任何事情

+0

最后,这是一个案例基础。一个比另一个有优势,反之亦然。当你想从显示一个视图跳转到另一个视图时,我的看法是'setVisibility()'更好,如果视图更小, 'addView()'+'removeView()'组合更适合自定义视图,其中包含许多其他元素,并且当您不想将视图保留为活动状态并且它们未连接到父级时可访问。 感谢您的输入,顺便〜 – Zarashi99

1

使用在不占用大量内存(如TextView)的视图上使用View.GONE并在视图上使用parent.removeView(view)是很多内存(如WebView)

+0

感谢您的输入! :) – Zarashi99

相关问题