内含 LazyRows 的 LazyColumn 的性能

问题描述 投票:0回答:3

我有一个惰性列,里面有惰性行,如图所示:

我正在使用 Android 9 的 2017 年中等质量手机上进行测试。发布版本启用了 R8。

行的滚动性能相当不错,但列的滚动性能非常低。我使用的是最简单的可组合项,没什么特别的。

LazyColumn { 
     items(
          items = rows,
          key = { it.id },
          contentType = { it.type}
     ) { 
          LazyRow {
               items(videos) {
                    Video()
               }
          }
     }
 } 

更新:这就是配置文件 GPU 渲染速度的样子:

更新:这就是探查器系统跟踪的样子。我无法弄清楚是什么导致了如此巨大的滞后:

更新:我使用了一个简单的Text而不是Video,但性能仍然非常差。我创建了一个示例项目

android kotlin android-jetpack-compose lazycolumn android-jetpack-compose-lazy-column
3个回答
0
投票

几个月前我玩它时遇到了同样的问题。我看到一些同事使用 ImmutableList 来存储这些项目,并且运气更好。可能值得一试 - 我遇到的问题是还发生了大量的重组,因此请确保使用分析器可以很好地进行


0
投票

在我看来,具有 1000x1000 项目的示例项目似乎有点矫枉过正。我建议合并分页作为解决方案。

这是 jetpack compose 中分页的示例:

https://github.com/MrNtlu/JetpackCompose-Pagination


查看官方文档也可能有用:

分页库概述

androidx.paging.compose


0
投票

我也遇到这个问题,最后我用传统视图重写了

© www.soinside.com 2019 - 2024. All rights reserved.