Android RecyclerView慢速滚动性能和滚动时的延迟/暂停

Android RecyclerView慢速滚动性能和滚动时的延迟/暂停,android,android-recyclerview,Android,Android Recyclerview,我正在使用recyclerview显示项目,项目大小可以是0-500 但它的滚动性能非常慢,有时会延迟/停止视图1~2秒。 我想在recyclerView中有一个平滑的滚动体验 即使我从使用Glide加载的cardview布局中删除图像,也不会影响性能 fragment_home.xml <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content"

我正在使用recyclerview显示项目,项目大小可以是0-500

但它的滚动性能非常慢,有时会延迟/停止视图1~2秒。 我想在recyclerView中有一个平滑的滚动体验

即使我从使用Glide加载的cardview布局中删除图像,也不会影响性能

fragment_home.xml

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_below="@+id/layoutGames">

        <android.support.v7.widget.RecyclerView
            android:id="@+id/recyclerViewGamesToday"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:scrollbars="vertical"
            android:scrollbarThumbVertical="@android:color/darker_gray"
            android:scrollbarSize="5dp"/>
    </LinearLayout>

我认为bindViewHolder中的逻辑使它变慢了,因为当滚动时,bindViewHolder会为每个即将显示的项目调用

此外,您还可以合并

if (games.getStatus().equals("CLOSED")) {

   gamesTodayViewHolder.imageViewEmptyCircle.setImageResource(R.drawable.ft);
            }
if (games.getStatus().equals("ACTIVE")) {
                gamesTodayViewHolder.imageViewEmptyCircle.setImageResource(R.drawable.active_icon);
            }
下一个开关盒


另外,不要在bindview中设置单击侦听器,这不太好……您可以在中为该holder类设置这些解决方案,以便平滑滚动

a) recyclerView.setHasFixedSize(true);
b) recyclerView.setItemViewCacheSize(20);
recyclerView.setDrawingCacheEnabled(true);
recyclerView.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH);
c) 在
onBindView()中
它将提供内存管理缓存,以减少图像加载时间

Glide.with(mCtx).load(games.getAwayTeamLogo()).
                        .diskCacheStrategy(DiskCacheStrategy.ALL)
                        .apply(options)
                        .into(gamesTodayViewHolder.imageViewAwayTeamLogo);

不要使用
ConstraintLayout
,使用
LinearLayout
和/或
RelativeLayout

尝试一下,看看性能的变化

它将加载为我工作的按需图像


尝试删除子对象中的约束布局一次layout@Redman我尝试删除约束布局,并用线性布局替换它,虽然我的布局变得混乱,但现在它可以平滑地滚动。如何使用约束布局修复它?感谢Constraint layout,因为回收商的子项出现了一些性能问题,只看到了少数情况发生,不知道发生的原因。所以我帮不了你。只需避免使用约束布局作为列表/回收器子项线性布局是回收器视图内部使用的错误解决方案,线性布局从子视图到父视图执行视图,因此首先必须执行子视图,然后执行其父视图,这是一项耗时的处理工作。请阅读约束布局文档。建议使用,但也不建议嵌套约束布局
a) recyclerView.setHasFixedSize(true);
b) recyclerView.setItemViewCacheSize(20);
recyclerView.setDrawingCacheEnabled(true);
recyclerView.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH);
Glide.with(mCtx).load(games.getAwayTeamLogo()).
                        .diskCacheStrategy(DiskCacheStrategy.ALL)
                        .apply(options)
                        .into(gamesTodayViewHolder.imageViewAwayTeamLogo);
 @Override
 public void onViewAttachedToWindow(@NonNull RecyclerView.ViewHolder holder) {
    super.onViewAttachedToWindow(holder);
    Glide.with(context)
         .load(URL)
         .into(holder.imageView);
}