ScrollView vs ListView性能

问题描述:

我有这种情况我想讨论:ScrollView vs ListView性能

我有一个列表视图,它的目的是显示25个商店。 对于我想要的设计我有:

2布局,第一个有: 商店的一张大照片(从数据库下载)。如果 1图标商店属于评为最佳商店列表(图标是我的应用程序) 1的TextView(下载字符串)

第二有: 3 textviews(下载字符串)

Everytextview有一个自定义字体。

正如您可以想象的那样,这对于每件商品来说都是一项艰巨的任务。

我的主要问题是:

难道我得到一个更好的性能,如果我下载的一切,而不是使一个ListView我填充这个数据滚动型?

创建布局可能需要多一点,但可能会更平滑滚动或我错了吗?

+0

在决定是否需要ListView和ScrollView之前,您可以尝试的第一件事是仅将位图显示为所需的分辨率(屏幕上的视图大小)。 – ataulm 2014-10-07 22:09:18

+1

你如何衡量性能btw?用户在屏幕上看到数据之前需要等待多长时间?或者,当滚动浏览内容时,它是否只有拉伸量(通过FPS量化)?或者这些和其他东西的一些组合? – ataulm 2014-10-07 22:16:28

+0

当我提到的表现更像是如果滚动更顺利 – pihh 2014-10-07 23:27:25

你可以用ListView(下载所有内容并显示)做同样的事情,但我不认为“下载所有内容”实际上会带来任何性能改进(除非你正在谈论缓存)。

ScrollView将导致更糟的内存性能,因为您必须一次创建并保留25个视图。相反,ListView在滚动时重复使用相同的视图,这将导致创建大致尽可能多的视图,因为它可以放在屏幕上。

随着ScrollView,如果数据集更改,你必须以某种方式重新填充你的25个视图。在最坏的情况下重新创建所有视图。

此外,与ScrollView一起,你将不得不一次在内存中处理25张大照片,这可能会给你几天的噩梦。

+0

有史以来最好的答案!我现在完成了!谢谢 – pihh 2014-10-07 23:28:18

根据我的经验,如果列表中元素的数量少于50,并且布局没有使用太多内存,那么使用滚动视图可能会更好。

ListView专为更大的数据集而设计,它旨在减少内存使用量而不是性能。 Google投入大量工作来优化其性能。与观察者模式和现代硬件一起,感知的性能接近完全填充的滚动视图。

但是,如果数据集足够小而不影响内存使用,为什么还需要Listview呢?由于谷歌完成了基础的优化优化,因此与精美动画结合使用时,使用ListView是非常棘手的。

+0

因为:1.你必须在内存中处理来自数据集的25个项目(包括图像),2.你必须处理25个视图层次结构(这不像你想象的那么小的记忆方式)。 3.您必须在数据集更改后立即重新创建所有这些内容。滚动性能大致相同,但做动画很难 - 我同意。希望'RecyclerView'能解决它。 – 2014-10-07 22:16:46

+0

正如我所提到的“如果列表中元素的数量少于50,并且布局没有使用太多内存”,那么使用scrollview会更好。 虽然我依靠自己以及大多数情况下依靠ListView,但它确实取决于每种情况。因此,我列举了两种用法的原因。 而scrollview确实有它的好处。 – uDevel 2014-10-07 22:24:49

+0

虽然不是很明确的标准吗?什么是太多的记忆?它指的是哪些设备? – ataulm 2014-10-08 08:14:57

我从类似的问题中学到的是,滚动视图更平滑的列表视图。我的情况是选择一个导航抽屉,因为平滑的通货膨胀和抽屉中的滚动直接影响用户体验。 我第一次采用了listview,但它并不平坦。然后我发现发现here谷歌开发人员使用scrolview而不是listview的抽屉,为我工作顺利。 但是,如果列表项的延迟加载是你所需要的(而不是我的情况),那么你应该去listview。