【问题标题】:How to make RecyclerView with Composable ViewHolder render faster?如何使 RecyclerView 与 Composable ViewHolder 渲染更快?
【发布时间】: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?

【问题讨论】:

    标签: android android-recyclerview android-jetpack-compose android-viewholder


    【解决方案1】:

    请在启用 R8 的情况下运行应用程序的发布版本。这会显着提高性能。

    【讨论】:

    • 我已经 minifyEnabled true ,看到app:minifyDebugWithR8 触发了。所以我相信 R8 已启用。结果是一样的,对Hybrid版本没有任何改进。
    • 它是调试版本还是发布版本?
    【解决方案2】:

    尝试使用与片段/活动的生命周期相关的差异视图组合策略。这样,您的可组合项就不会基于经常发生的视图的附加/分离

    【讨论】:

      猜你喜欢
      • 2013-12-07
      • 2017-07-28
      • 2015-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多