【问题标题】:Best practice for displaying tall, rich content in Android. ScrollView or ListView?在 Android 中显示高大而丰富的内容的最佳实践。滚动视图还是列表视图?
【发布时间】:2017-09-14 16:23:08
【问题描述】:

当显示具有垂直排列的各个部分的屏幕时,每个部分看起来都不同(因此,回收项目可能不会使用实际的回收,而是一种娱乐),使用回收视图组会带来任何真正的好处,考虑到不会显示大的位图,而不是普通的ScrollView?

我怀疑在使用 ListView 时会影响性能,例如,这可能会影响滚动,并且内存使用量会略有增加,在使用 ScrollView 时可能会出现延迟(仅在测量布局时 - 不那么频繁),但是这些对于 7 个部分是否重要?例如,其中 3 个部分一次可见?

谢谢!

【问题讨论】:

  • 对静态数据使用ScrollView,对动态数据使用ListView xxx

标签: android performance listview android-scrollview


【解决方案1】:

这主要是推测,但我认为这是相对消息灵通的推测。

假设您有 1000 个部分,每个部分都彼此不同。我的理解是ScrollViewListView 都会在这里出现“问题”,尽管它们各自遇到的问题类型会有所不同。

ScrollView 将预先测量并布置其所有子节点(这可能会非常昂贵,并且可能会导致您的 UI 出现相当大的延迟)。它会使所有这些视图膨胀并在内存中徘徊(这可能会导致您的进程因OutOfMemoryError 而崩溃)。但是如果延迟是可以接受的,并且如果你有足够的内存来处理所有事情,此时你的应用程序应该运行得非常流畅(即滚动/滚动时不会丢帧)。

另一方面,ListView 只会测量和布置当前在屏幕上的那些孩子,以及一些立即离开屏幕的额外内容。所以初始性能应该很快,内存消耗应该很低。但是您提到每个部分都是“不同的”,因此视图回收不会“起作用”。在实践中,这意味着忽略getView()convertView 参数并每次都膨胀一个新视图。如果你的部分很复杂,这很容易在滚动/翻页时导致跳帧。

但您提到您的应用将只有 7 个部分,或大约 2.5 个屏幕的 UI。对于这么少的人,我认为在简单地尝试之前担心性能是愚蠢的;我怀疑 ScrollView 持有 LinearLayout 持有所有七个部分在所有现代设备上都可以很好地工作。

【讨论】:

    猜你喜欢
    • 2011-12-26
    • 1970-01-01
    • 2013-08-03
    • 1970-01-01
    • 2013-10-04
    • 2018-09-25
    • 1970-01-01
    • 1970-01-01
    • 2012-01-16
    相关资源
    最近更新 更多