LazyColumn 比垂直滚动的 Column 慢
Posted
技术标签:
【中文标题】LazyColumn 比垂直滚动的 Column 慢【英文标题】:LazyColumn is slower than Column with vertical scroll 【发布时间】:2021-12-19 16:44:07 【问题描述】:我有想要在列表中显示的产品单元格,我使用了 LazyColumn 但性能很糟糕,我找不到它为什么这么慢。然后我将 LazyColumn 切换到 Column 并且所有突然的滚动都超级流畅
LazyColumn 版本:
LazyColumn()
items(cartItems, key = it.cartItem.id) cartItemData ->
CartItemWithActions(data = cartItemData)
Divider(color = colorResource(id = R.color.separator_line))
列版本
val state = rememberScrollState()
Column(modifier = Modifier.verticalScroll(state))
cartItems.forEach cartItemData ->
CartItemWithActions(data = cartItemData)
Divider(color = colorResource(id = R.color.separator_line))
CartItemWithActions 是我的产品单元格,其中包含我正在使用 glide 和几个文本加载的图像
LazyColumn 版本的 HWUI
列的 HWUI
谁能提供提示为什么 LazyColumn 比 Column 慢?
更新
以这种方式设置 LazyColumn 时,LazyColumn 滚动效果似乎更好
LazyColumn()
items(
count = cartItems.size,
key =
cartItems[it].cartItem.id
,
itemContent = index ->
val cartItemData = cartItems[index]
CartItemWithActions(data = cartItemData)
Divider(
color = colorResource(id =R.color.separator_line)
)
)
【问题讨论】:
尝试在发布版本中运行它 我试过没用 我也亲身体验过,但是每次应用启动时,连续随机滚动五秒后,它似乎就消失了 这不会发生在像Text
这样简单的东西上,但是对于大量的自定义 Composables,这对我来说似乎也是一个问题。
@MARSK 是的,简单的布局没问题
【参考方案1】:
似乎以这种方式初始化 LazyColumn 解决了我的问题
LazyColumn()
items(
count = cartItems.size,
key =
cartItems[it].cartItem.id
,
itemContent = index ->
val cartItemData = cartItems[index]
CartItemWithActions(data = cartItemData)
Divider(
color = colorResource(id =R.color.separator_line)
)
)
但我还是不知道为什么
【讨论】:
它工作得更好,因为使用 key 参数使 Jetpack Compose 具有与 RecyclerView 中的 DiffUtil 类似的功能。以上是关于LazyColumn 比垂直滚动的 Column 慢的主要内容,如果未能解决你的问题,请参考以下文章
Kotlin Compose 列表 手动控制列表。给Column添加滚动能力 LazyColumn动画滚动到底部
修复了 Jetpack Compose 中 LazyColumn 内的网格?
Jetpack Compose - 恢复 LazyColumn 滚动状态
删除 Jetpack Compose 中的 LazyColumn 过度滚动效果