【发布时间】:2020-09-09 10:18:05
【问题描述】:
我有一个带有 RecyclerView 的片段(喷气背包导航图的一部分)(它是一个 2 x 10 的垂直网格), 1 张卡是 ConstraintLayout(1 个 TextView 标题和 2 个 TextView 子标题 + 1 个 ImageView 64x64dp,每个使用大约 10kb 的 png)
问题是根据android studio systrace(CPU->Trace System Calls)的框架需要160-250ms。我正在 Android 10,小米 Note 9 Pro(6G 内存,SG 720G)上进行测试,从 android 配置文件按钮开始。
1张卡片布局:
<?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"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/id1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clickable="true"
android:focusable="true"
android:background="@drawable/card_background"
android:layout_margin="8dp"
android:elevation="2dp"
android:foreground="@drawable/btn_background_ripple">
<TextView
android:id="@+id/tvTitle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentBottom="true"
android:layout_marginStart="8dp"
android:layout_marginLeft="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:layout_marginRight="8dp"
android:fontFamily="@font/roboto"
android:gravity="center_horizontal"
android:lineSpacingExtra="3sp"
android:textColor="@android:color/black"
android:textSize="16sp"
app:layout_constraintBottom_toTopOf="@+id/tvSubTitle"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/iv"
app:layout_constraintVertical_bias="0.0"
app:layout_constraintVertical_chainStyle="packed" />
<TextView
android:id="@+id/tvSubTitle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentBottom="true"
android:layout_marginStart="8dp"
android:layout_marginLeft="8dp"
android:layout_marginEnd="8dp"
android:layout_marginRight="8dp"
android:layout_marginBottom="20dp"
android:fontFamily="@font/roboto"
android:gravity="center_horizontal"
android:lineSpacingExtra="3sp"
android:textColor="@android:color/black"
android:textSize="14sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tvTitle"
tools:text="Vocabulario" />
<ImageView
android:id="@+id/iv"
android:layout_width="64dp"
android:layout_height="64dp"
android:layout_marginTop="16dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
堆栈跟踪的屏幕截图
]1
【问题讨论】:
-
我没有看到您的 xml 布局有任何问题,请尝试使用 Glide 加载图像
-
@ilaimihar 我尝试实际使用线圈(带有 svg 和 png),图像在可绘制文件夹中是本地的
-
我确实看到您的布局存在一些问题,有趣的是其他用户没有。例如;可绘制的背景,一条链,整个布局都有环绕高度,所以它需要测量所有东西才能说“这是我的最终尺寸”。图像是固定的,但 textViews 不是(因此文本测量通过.. 成本高!)。 TextViews 也没有
constrainedHeight=true,这可能会导致问题。您有 start/left、end/right 重复项(不是问题,但对 API 16+ 无用),还有自定义字体、偏置、边距等。alignParentTop/bottm 无用(RelativeLayout!)。 -
您还提到“1 张卡是 ConstraintLayout”这是 CardView 吗?还是那是您的 recyclerView 的布局?此外,发布 RecyclerView 的(相关)布局,它还参与确定 RV 必须从多少空间开始......总而言之,很难判断您是否有 CL 问题或者它只是这里的布局优化很差。您使用的是哪个版本的 CL?也提一下。
标签: android android-studio user-interface systrace