【问题标题】:Jetpack Compose lazycolumn performanceJetpack Compose 惰性列性能
【发布时间】:2021-11-29 16:37:16
【问题描述】:

我是jetpack compose的新手,我从JetpackCompose Basics的代码中学习它 所以我在create a performant lazy list找到了

注意:LazyColumn 不像 RecyclerView 那样回收它的孩子。它 在您滚动浏览它时发出新的Composables 并且仍然 高性能,因为发射 Composables 与 实例化 Android 视图。

那么如何发射新的可组合项既便宜又高效,那么为什么不只使用列并组合整个列表一次,而不是在滚动时继续发射可组合项,即使发射composables 只是可见的项目布局

更新:如果可见项目是 10,那么在用户滚动项目从 0 到 9 之前是可见的并且已经渲染,现在用户已经向上滚动并且可见项目从 5 到 14,jetpack compose 删除了 5先前已渲染的项目,如果用户向下滚动,它们将被重组或 jetpack compose 将所有渲染的视图保留在内存中,无论它是否可见

【问题讨论】:

    标签: android kotlin android-jetpack-compose


    【解决方案1】:

    因为“便宜”的定义是有限制的,但列表可以有多大是没有限制的。输出 100-200 个可组合物可能很便宜(我不相信,但为了争论起见,让我们这么说)。输出 10K 并不便宜。由数据库支持的结果列表很容易成为。

    所以您仍然不想一直输出所有内容。但是输出用户可以合理滚动到的所有内容可能相对便宜,因为没有人会到达 10K 列表的末尾。从而使其成为基于常见用户行为的合理折衷方案。当他们进一步向下滚动页面时,您会失去性能,但这样做的用户百分比足够小,您可能不在乎。

    【讨论】:

    • 好的,我知道了,你能不能重读一下问题,我已经更新了
    • 我认为你havet explained the important part of the questions 通过回答发现根本原因,从而解决了缺乏理解的问题,如何发射新的可组合物既便宜又高效。