RecyclerView滚动时延迟



我有一个recyclerView,从内存中加载歌曲,当我滚动它延迟,这是我的ViewBinding。

override fun onBindViewHolder(holder: MyHolder, position: Int) {
holder.titleView.text = musicList[position].title
holder.albumName.text = musicList[position].artist
holder.duration.text = formatDuration(musicList[position].length)
Glide
.with(context)
.load(musicList[position].artUri)
.diskCacheStrategy(DiskCacheStrategy.ALL)
.apply(RequestOptions().placeholder(R.drawable.image_as_cover).centerCrop())
.into(holder.imageView)
holder.itemView.setOnClickListener {
if (MainActivity.isSearching)
sendIntent(position = position, parameter = "MusicAdapterSearch")
else
sendIntent(position = position, parameter = "MusicAdapter")
}
}

我注意到,当我从绑定中删除图像加载时,即Glide,我没有延迟,每次打开应用程序时它才第一次滚动。如何处理延迟,是否应该使用其他库或任何类似缓存的东西?这是我的XML。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:layout_margin="5dp"
android:theme="@style/Theme.Music.Font">
<com.google.android.material.imageview.ShapeableImageView
android:id="@+id/imageView"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_alignParentStart="true"
android:layout_margin="5dp"
android:contentDescription="@string/cover"
android:src="@drawable/image_as_cover"
app:shapeAppearance="@style/roundedImageView" />
<LinearLayout
android:id="@+id/linearLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toStartOf="@+id/duration"
android:layout_toEndOf="@+id/imageView"
android:orientation="vertical">
<TextView
android:id="@+id/titleView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:fontFamily="@font/medium"
android:maxLines="1"
android:singleLine="true"
android:text="@string/love_is_gone_by_slander_forever_on_love"
android:textSize="15sp" />
<TextView
android:id="@+id/albumName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:fontFamily="@font/medium"
android:maxLines="1"
android:text="@string/albumName"
android:textSize="12sp"
android:theme="@style/Theme.Music.FontColor" />
</LinearLayout>
<TextView
android:id="@+id/duration"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:layout_margin="10dp"
android:fontFamily="@font/medium"
android:maxLines="1"
android:text="@string/duration"
android:textSize="11sp" />
</RelativeLayout>

这可能是由于高质量的图像与滑动

尝试通过添加请求选项来调整它的大小

RequestOptions myOptions = new RequestOptions()
.centerCrop() // or centerCrop
.override(800, 500);//your imageview frame size
Glide.with(activity)
.applyDefaultRequestOptions(myOptions)
.load(list.get(position).appthumbnail)
.error(R.drawable.no_image_available)
.into(holder.ivImage);

希望对你有帮助

我请求视图持有人布局的原因是因为它可能是导致jack的原因之一。

您可以尝试使用下面的XML,看看问题是否会解决。

(通过将relative layout和子linear layout替换为constraint layout)

。,视图holder XML示例

<?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:layout_margin="5dp"
android:theme="@style/Theme.Music.Font">
<com.google.android.material.imageview.ShapeableImageView
android:id="@+id/imageView"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_alignParentStart="true"
android:layout_margin="5dp"
android:contentDescription="@string/cover"
android:src="@drawable/image_as_cover"
app:shapeAppearance="@style/roundedImageView"

app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent" />

<View
android:id="@+id/linearLayout"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@id/imageView"
app:layout_constraintEnd_toEndOf="parent" />
<TextView
android:id="@+id/titleView"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:maxLines="1"
android:singleLine="true"
android:fontFamily="@font/medium"
android:text="@string/love_is_gone_by_slander_forever_on_love"
android:textSize="15sp"
android:text="123"
app:layout_constraintTop_toTopOf="@id/linearLayout"
app:layout_constraintBottom_toTopOf="@id/albumName"
app:layout_constraintStart_toStartOf="@id/linearLayout"
app:layout_constraintEnd_toEndOf="@id/linearLayout" />

<TextView
android:id="@+id/albumName"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:fontFamily="@font/medium"
android:maxLines="1"
android:singleLine="true"
android:text="@string/love_is_gone_by_slander_forever_on_love"
android:textSize="15sp"
app:layout_constraintTop_toBottomOf="@id/titleView"
app:layout_constraintBottom_toTopOf="@id/duration"
app:layout_constraintStart_toStartOf="@id/linearLayout"
app:layout_constraintEnd_toEndOf="@id/linearLayout" />
<TextView
android:id="@+id/duration"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:layout_margin="10dp"
android:fontFamily="@font/medium"
android:maxLines="1"
android:text="@string/duration"
android:textSize="11sp"
app:layout_constraintTop_toBottomOf="@id/albumName"
app:layout_constraintBottom_toBottomOf="@id/linearLayout"
app:layout_constraintStart_toStartOf="@id/linearLayout"
app:layout_constraintEnd_toEndOf="@id/linearLayout" />

</androidx.constraintlayout.widget.ConstraintLayout>

REF

https://developer.android.com/topic/performance/vitals/render common-jank

"如果您的视图类型看起来不错,请考虑降低通货膨胀的成本。减少不必要的容器视图和结构视图会有所帮助——考虑使用ConstraintLayout构建itemview,这可以使减少结构视图变得容易。如果您想真正优化性能,您的项目层次结构很简单,并且您不需要复杂的主题和样式特性,请考虑自己调用构造函数—但是请注意,通常不值得牺牲XML的简单性和特性。">

最新更新