【问题标题】:Speeding up performance of multiple listviews in the same fragment加快同一片段中多个列表视图的性能
【发布时间】:2015-06-03 15:54:38
【问题描述】:

为了理解我将要讲的结构,首先看这个示例图:

我需要在一个片段中显示多个 ListView。问题是在打开给定的片段时,膨胀视图需要很长时间,因为:

每个 ListView 都会为自己膨胀 3-5 个项目,因为这两个 ListView 都没有废料视图(目前)。

所以片段会瞬间膨胀 10-30 个相同视图的实例,这很容易导致 200-300ms 长的卡顿,这远远不能接受(片段有显示和隐藏动画)。

我的问题是,有什么方法可以加快通货膨胀(除了使用 ViewHolders、简化层次结构和通常的事情)。由于视图属于同一类型,因此可能有相同的 global Recycler 存储废品视图,并且会超过屏幕的生命周期,这会导致在创建 ListView 时出现废品视图(查看ListView 源代码,需要大量的编码和对内部结构的理解)。

由于有相当多的应用程序具有类似的结构,我很好奇它们是如何解决(如果可以的话)通胀性能问题

【问题讨论】:

  • 您是在异步分配图像吗?
  • 是的,当然,我使用的是毕加索。

标签: android android-layout android-listview android-viewholder android-recyclerview


【解决方案1】:

您可以使用自定义视图作为列表项来减少实例化对象的数量。因此,如果您使用 1 个图像视图和 3-4 个文本视图作为列表项,您可以使用自定义将计数减少到 1查看...

如果设计允许,您可以将全部 6 张图片作为一个自定义视图..

【讨论】:

  • 列表应该是可滚动的,并且不仅可以包含6个,甚至可以连续包含100个图像。
  • 我明白..但一次只有 6 个可见..因此您可以构建一些逻辑以在用户滚动列表时重用相同的对象..可能自定义列表项对象可以存储 8-9 个图像..您可以通过在回收视图之前检查系统生成的列表项的数量来计算数量
  • 不会有性能提升,如果只有 2 个项目适合屏幕呢? (就像在电话上一样)。还要编码这将需要太多的努力。
  • 应该有性能提升,因为您正在减少对象的数量..但是我同意这需要一些编码工作,但是如果性能非常关键,我认为这是值得的..对于手机您将使用带有 2 个图像的自定义视图..基本上您必须使自定义视图可配置以更改图像的数量...
  • 我正在减少视图数量,但我仍然需要扩展相同的视图层次结构。膨胀时间不取决于观看次数,而是取决于复杂性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-22
相关资源
最近更新 更多