我可以使用嵌套的线性布局而不是列表视图来获取大型列表吗?

时间:2013-12-20 04:43:38

标签: android performance android-layout android-listview

我正在从服务器下载很多图片和文字(就像facebook帖子一样)

因此,当滚动列表视图时,它会在创建回收视图时闪烁。所以我想为主线性布局中的每个帖子使用多个linearlayouts。

在这种情况下,是否会出现滚动性能或内存消耗问题?请帮帮忙?

2 个答案:

答案 0 :(得分:3)

当然会出现性能问题因为listview会创建并丢弃不在焦点的列表项,例如200只屏幕上的那些(例如10个)在内存中,而在线性布局中所有200将必须在内存中保留,这是来自堆而不是堆栈的内存,因此如果应用程序保持运行会导致手机受损,并且由于内存不足问题会导致FORCE CLOSE。

你也可以让你的线性布局丢弃不在焦点的项目,但即使经过这么多的努力,它也会与列表视图相同,所以我不建议这样做,而是直接使用列表视图

答案 1 :(得分:2)

您不应该使用一堆LinearLayouts作为ListView的替代品。

ListViews执行一个名为View Recycling的操作,以便在任何时候只有用户可以实际看到的视图数量保存在内存中。当用户向上/向下滚动时,创建并丢弃其余视图。

例如,如果您的屏幕大小一次只能看到10行,那么根据具体实现,每次只有10-15行ListView将在内存中。

如果您用200 LinearLayouts替换ListView,那么您将在内存中保存200个ViewGroup。这可能会导致性能低下或导致应用程序因OutOfMemoryError而崩溃。

有关ListView性能改进的更多提示,请参阅此great post by Lucas Rocha