如何使 RecyclerView 与 Composable ViewHolder 渲染更快?
Posted
技术标签:
【中文标题】如何使 RecyclerView 与 Composable ViewHolder 渲染更快?【英文标题】:How to make RecyclerView with Composable ViewHolder render faster? 【发布时间】:2021-11-29 11:59:19 【问题描述】:根据https://developer.android.com/jetpack/compose/interop/compose-in-existing-ui#compose-recyclerview,可以在RecyclerView中使用的可组合ViewHolder如下
import androidx.compose.ui.platform.ViewCompositionStrategy
class MyComposeViewHolder(
val composeView: ComposeView
) : RecyclerView.ViewHolder(composeView)
init
composeView.setViewCompositionStrategy(
ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed
)
fun bind(input: String)
composeView.setContent
MdcTheme
Text(input)
看起来,每次都是bind
可组合的setContent
(即再次重绘)。
我用Profile GPU Rendering测量速度,很明显ReyclerView+ComposeViewHolder的Hybrid比纯RecyclerView或LazyColumn慢。
您可以获取design here
我们怎样才能加速Hybrid RecyclerView+ComposeViewHolder?
【问题讨论】:
【参考方案1】:请在启用 R8 的情况下运行应用程序的发布版本。这会显着提高性能。
【讨论】:
我已经 minifyEnabled true ,看到app:minifyDebugWithR8
触发了。所以我相信 R8 已启用。结果是一样的,对Hybrid版本没有任何改进。
它是调试版本还是发布版本?【参考方案2】:
尝试使用与片段/活动的生命周期相关的差异视图组合策略。这样,您的可组合项就不会基于经常发生的视图的附加/分离
【讨论】:
以上是关于如何使 RecyclerView 与 Composable ViewHolder 渲染更快?的主要内容,如果未能解决你的问题,请参考以下文章
如何使 Recyclerview 和 Cardview 透明