RecyclerView ViewHolder 内部 ConstraintLayout 的性能

2024-01-30

在过去的两天里,我一直在尝试分类为什么我的 RecyclerView 在滚动时速度如此之慢,并且我已将其范围缩小到我用于行的 ConstraintLayout。在 Android 上使用 GPU 分析器会显示绿色/蓝绿色条一直到屏幕顶部,表明出现严重卡顿。很明显出了什么问题。

这是我的观看者的样子:

class MyViewHolder(

    override val containerView: View) : RecyclerView.ViewHolder(containerView), LayoutContainer {
        fun bindTo(item: Item?, clickListener: (Item?) -> Unit) {
            text_item_name.text = item?.name
            Glide.with(containerView.context).load(item?.url).into(image_item)

            containerView.setOnClickListener { clickListener(item) }
        }
    }

这就是我的布局的样子。尽可能简单:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="?android:attr/selectableItemBackground"
    android:paddingBottom="@dimen/padding"
    android:paddingEnd="@dimen/padding_2x"
    android:paddingStart="@dimen/padding_2x"
    android:paddingTop="@dimen/padding">

    <ImageView
        android:id="@+id/image_item"
        android:layout_width="24dp"
        android:layout_height="24dp"
        android:layout_marginEnd="@dimen/margin_2x"
        android:layout_marginStart="@dimen/margin_2x"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/text_coin_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginEnd="@dimen/margin_2x"
        android:layout_marginStart="@dimen/margin_2x"
        android:textSize="16sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toEndOf="@id/image_item"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintEnd_toEndOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

所以我的问题是:我的布局有什么问题导致卡顿?我使用了不正确的 LayoutManager 吗?限制是否导致透支?

如果我将布局 XML 完全重写为基于 LinearLayout,那么它就会如丝绸般光滑。


好吧,我终于找到了罪魁祸首:

android:layout_height="wrap_content"

如果我为此属性指定固定大小,一切都很好。确定每行视图高度的不断计算可能会导致问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RecyclerView ViewHolder 内部 ConstraintLayout 的性能 的相关文章

随机推荐

  • 使下拉菜单在点击时向下推送内容

    每当用户选择带有下拉菜单的链接时 我都会尝试下推我的内容 但是 当单击时 下拉菜单会覆盖内容而不是将其向下推 我尝试过使用position relatives position absolute等来达到某种期望的结果 但没有这样的运气 我见
  • 双工命名管道在某个写入时挂起

    我有一个 C 管道服务器应用程序和一个 C 管道客户端应用程序通过 Windows 命名管道进行通信 双工 消息模式 在单独的读取线程中等待 阻塞 一切正常 通过管道发送和接收数据 直到我尝试从客户端写入管道以响应表单 textchange
  • 实际上复制/提取苹果的“iPhone X 的连续角”?

    历史性的问题 请注意 现在就这么简单 https stackoverflow com a 59993994 294884 https stackoverflow com a 59993994 294884 iPhoneX 不寻常的底角是 A
  • 如何解码 matplotlib 颜色图中的颜色映射?

    我知道如何将数字映射到这篇文章中的颜色 将值映射到 matplotlib 中的颜色 https stackoverflow com questions 28752727 map values to colors in matplotlib
  • 训练时间最短的人脸检测算法[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 想问是否有任何适合视频的人脸检测方案需要最少的训练时间 理想情况下是几天而不是像 Viola Jones 那样的几周 我读过有关 LB
  • 将值添加到 MassTransit.RabbitMq 中的标头

    我正在使用 MassTransit 3 0 0 0 我很难理解如何在请求 响应场景中拦截消息 并将一些信息添加到我可以在接收器端读取的标头字段 我正在看中间件 http masstransit project com MassTransit
  • Java OCR 库有推荐吗? [复制]

    这个问题在这里已经有答案了 我需要检查大量图片 看看它们是否有关键字 谁能推荐一个好的 可靠的 OCR 库 我很乐意牺牲速度来换取准确性 没有纯 Java OCR 库具有与准确性有关的事情 https stackoverflow com q
  • Microsoft 桌面搜索 - 包含在 Windows Server 2008 上不返回结果

    我正在尝试搜索远程文件共享 运行 Windows Server 2008 R2 对于包含一些文本的文件 如果我尝试这样做 效果很好 SELECT System FileName FROM RemoteServer SystemIndex W
  • 在 TensorFlow 中,有什么方法可以初始化未初始化的变量吗?

    TensorFlow 中初始化变量的标准方法是 init tf initialize all variables sess tf Session sess run init 经过一段时间的学习后 我创建了一组新的变量 但是一旦初始化它们 它
  • window.opener 不对

    我正在打开一个弹出窗口 并希望在其中执行单击操作 从而在打开它的页面中执行一些 jQuery 我在网上找到的所有内容都表明我应该能够使用 window opener 做到这一点 例如JQuery 写入开启器窗口 https stackove
  • jQueryeach() 闭包 - 如何访问外部变量

    从 each 中访问 this rules 变量的最佳方法是什么 任何关于原因 方式的解释也会有帮助 app Style function node this style node this rules var ruleHolder nod
  • 为什么perl配置VC-WIN64A后没有ms\do_ms.bat?

    我正在使用 Visual Studio 2015 编译 OpenSSL 我已经安装了 Windows 10 上的 Visual Studio 2015 ActivePerl 5 24 0 2400 MSWin32 x64 300558 na
  • 如何在不使用非 api 类的情况下取消 Java 中的 Files.copy() ?

    我正在下载一个文件Files copy method Files copy in Paths get targetZipFile StandardCopyOption REPLACE EXISTING 如果下载很慢我想取消它 我在 stac
  • gcov 在当前目录中创建 .gcov 文件。有什么办法可以改变这个吗?

    我在 RHEL 上运行 gcov gcc 4 1 2 当我想为 gcov 文件指定目录时 关于如何做到这一点有什么想法吗 从您想要创建其文件的目录运行 gcov 你必须使用 o参数告诉它在哪里查找 gcno gcda 文件 看gcov 的文
  • 是什么让 SPI 比 I2C 协议更快 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我了解 I2C 和 SPI 通信的基础知识 因为两者都是同步协议 我想知道是什么让 SPI 比 I2C 更快 如果我没记错的话 使用 I2
  • Docker:理解ENTRYPOINT和CMD指令

    我想问一些关于ENTRYPOINT and CMD可在 Dockerfile 中使用的说明 Providing that I m mounting local directories as volumes in a container us
  • 如何检查我当前是否在主屏幕上

    是否可以检查我的应用程序当前是否处于后台并且主屏幕是否已启动 没有 API 可以知道主屏幕是否正在显示 但是 您可以使用各种 Activity 生命周期回调 onStop 等 知道您的应用程序何时发送到后台
  • 为什么未装箱的数组不是可折叠的实例?

    在 Haskell 中找出要使用的正确数据容器可能有点棘手 对于我认为使用的 2D 网格应用程序UArray会是合适的 然而 据我所知UArray不是一个实例foldable 不在Data Array IArray nor Data Arr
  • Flutter SQFlite 一对多关系设置

    我正在创建一个应用程序并需要一个数据库 该数据库包含位置表和兴趣点表 这是一对多的关系 一个位置有多个兴趣点 现在我尝试用 sqflite 在 flutter 中建立这种关系 但失败了 我已经尝试添加外键 但没有成功 这只是代码中最重要的部
  • RecyclerView ViewHolder 内部 ConstraintLayout 的性能

    在过去的两天里 我一直在尝试分类为什么我的 RecyclerView 在滚动时速度如此之慢 并且我已将其范围缩小到我用于行的 ConstraintLayout 在 Android 上使用 GPU 分析器会显示绿色 蓝绿色条一直到屏幕顶部 表