极慢的RecyclerView性能 [英] Extremely Laggy RecyclerView Performance

查看:67
本文介绍了极慢的RecyclerView性能的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在ViewPager内部有一个RecyclerView实现,其性能非常糟糕. 这是有关性能的视频.我有两种视图类型,并且正在使用ViewHolder模式(因此它不是通货膨胀或寻找引起问题的观点.

I have a RecyclerView implementation inside of a ViewPager, and its performance is pretty horrible. Here's a video of the performance in question. I have two view types, and am using the ViewHolder pattern (so it's not inflation or finding views causing the issue).

这是适配器.

这是cardview.xml文件

Here's the cardview.xml file

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"

android:layout_height="wrap_content"

android:clipChildren="false"


android:orientation="vertical"

android:scrollbars="none">

<LinearLayout
    android:id="@+id/next"
    android:layout_width="match_parent"
    android:layout_height="2dp"
    android:layout_marginBottom="8dp"
    android:elevation="8dp"
    android:orientation="horizontal" />

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/top"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="?attr/card_background"
    android:orientation="horizontal">


    <LinearLayout
        android:id="@+id/dots"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"

        android:layout_alignParentTop="true"

        android:background="?attr/activity_background"
        android:orientation="horizontal">


    </LinearLayout>


    <View
        android:id="@+id/dot"
        android:layout_width="3dp"
        android:layout_height="match_parent"

        android:layout_alignParentBottom="true"
        android:layout_alignParentTop="true"
        android:layout_toRightOf="@id/dots"
        android:background="#fff" />


    <RelativeLayout
        android:id="@+id/background"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@+id/dot"
        android:orientation="vertical"
        android:paddingLeft="8dp"

        android:paddingRight="8dp"
        android:paddingTop="8dp">


        <include
            android:id="@+id/children"
            layout="@layout/commentnumber"
            android:layout_width="wrap_content"
            android:layout_height="16dp"
            android:layout_alignParentRight="true"

            android:layout_gravity="right"
            android:layout_marginBottom="-16dp"
            android:layout_marginLeft="10dp"
            android:gravity="center_horizontal"
            android:orientation="horizontal" />


        <com.wefika.flowlayout.FlowLayout
            android:id="@+id/flow"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:gravity="center_vertical"
            android:orientation="horizontal"
            android:paddingRight="10dp">

            <TextView
                android:id="@+id/author"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:gravity="center_vertical"
                android:layout_gravity="center_vertical"

                android:paddingRight="5dp"
                android:text="ccrama"

                android:textColor="?attr/font"
                android:textSize="?attr/font_commenttitle"
                android:textStyle="bold"

                />

            <TextView
                android:id="@+id/score"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:gravity="center_vertical"
                android:layout_gravity="center_vertical"
                android:paddingLeft="5dp"
                android:paddingRight="5dp"
                android:text="+49"
                android:textColor="?attr/font"
                android:textSize="?attr/font_commentinfo"

                android:textStyle="bold" />

            <TextView
                android:id="@+id/time"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:gravity="center_vertical"
                android:layout_alignParentRight="true"
                android:layout_gravity="center_vertical"
                android:paddingLeft="5dp"
                android:paddingRight="5dp"
                android:text="4 hours ago"

                android:textColor="?attr/font"

                android:textSize="?attr/font_commentinfo" />

            <include
                android:id="@+id/gild"
                layout="@layout/gilded"
                android:layout_width="wrap_content"
                android:layout_height="16dp"

                android:layout_gravity="center_vertical"
                android:gravity="center_horizontal"
                android:orientation="horizontal"
                android:paddingLeft="5dp"
                android:paddingRight="5dp" />

            <include
                android:id="@+id/flairbubble"
                layout="@layout/flair"
                android:layout_width="wrap_content"
                android:layout_height="16dp"

                android:layout_gravity="center_vertical"
                android:layout_margin="5dp"

                android:layout_toRightOf="@+id/pinned"
                android:paddingLeft="5dp"
                android:paddingRight="5dp"
                android:src="@drawable/pinned" />

            <include
                android:id="@+id/you"
                layout="@layout/you"
                android:layout_width="wrap_content"
                android:layout_height="16dp"

                android:layout_centerVertical="true"
                android:layout_gravity="center_vertical"

                android:layout_toRightOf="@+id/pinned"
                android:paddingLeft="5dp"
                android:paddingRight="5dp"
                android:src="@drawable/pinned" />

            <include
                android:id="@+id/op"
                layout="@layout/op"
                android:layout_width="wrap_content"
                android:layout_height="16dp"

                android:layout_marginLeft="4dp"
                android:layout_centerVertical="true"
                android:layout_gravity="center_vertical"

                android:layout_toRightOf="@+id/pinned"
                android:paddingLeft="5dp"
                android:paddingRight="5dp"
                android:src="@drawable/pinned" />
        </com.wefika.flowlayout.FlowLayout>


        <me.ccrama.redditslide.ActiveTextView
            android:id="@+id/content"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/flow"
            android:paddingBottom="8dp"

            android:textColor="?attr/font"
            android:textSize="?attr/font_commentbody" />


    </RelativeLayout>




</LinearLayout>

<LinearLayout
    android:id="@+id/menu"
    android:layout_width="match_parent"
    android:layout_height="48dp"
    android:layout_below="@+id/background"
    android:orientation="horizontal"
    android:weightSum="4">

    <ImageView
        android:id="@+id/more"
        android:layout_width="0dp"
        android:layout_height="48dp"
        android:layout_weight="1"

        android:background="?android:selectableItemBackground"
        android:padding="12dp"
        android:src="@drawable/more"


        android:tint="?attr/tint" />


    <ImageView
        android:id="@+id/downvote"
        android:layout_width="0dp"
        android:layout_height="48dp"
        android:layout_weight="1"
        android:background="?android:selectableItemBackground"
        android:padding="12dp"

        android:src="@drawable/downvoteicon"
        android:tint="?attr/tint" />

    <ImageView
        android:id="@+id/upvote"
        android:layout_width="0dp"
        android:layout_height="48dp"
        android:layout_weight="1"
        android:background="?android:selectableItemBackground"
        android:padding="12dp"
        android:src="@drawable/upvoteicon"

        android:tint="?attr/tint" />

    <ImageView
        android:id="@+id/reply"
        android:layout_width="0dp"
        android:layout_height="48dp"
        android:layout_weight="1"
        android:background="?android:selectableItemBackground"
        android:padding="12dp"

        android:src="@drawable/reply"
        android:tint="?attr/tint" />
</LinearLayout>

<LinearLayout
    android:id="@+id/replyArea"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@+id/menu"

    android:orientation="vertical"
    android:padding="16dp">

    <EditText
        android:id="@+id/replyLine"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:backgroundTint="?attr/tint"
        android:hint="Reply"
        android:imeOptions="actionDone|flagNoEnterAction"
        android:inputType="textMultiLine|textAutoCorrect|textCapSentences"
        android:minHeight="30dp"
        android:textColor="?attr/font"
        android:textColorHint="?attr/font" />

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TextView
            android:id="@+id/discard"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="?android:selectableItemBackground"
            android:padding="4dp"

            android:text="DISCARD"
            android:textColor="?attr/font"
            android:textSize="14sp"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/send"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:background="?android:selectableItemBackground"
            android:padding="4dp"

            android:text="SUBMIT"
            android:textColor="?attr/font"

            android:textSize="14sp"
            android:textStyle="bold" />
    </RelativeLayout>

    <LinearLayout
        android:id="@+id/innersend2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginLeft="-6dp"
        android:layout_marginRight="-6dp"
        android:alpha=".56"

        android:gravity="center"
        android:orientation="horizontal"

        android:weightSum="8">

        <ImageButton
            android:id="@+id/imagerep"
            android:layout_width="0dp"
            android:layout_height="48dp"
            android:layout_weight="1"
            android:height="48dp"
            android:background="#00000000"
            android:cropToPadding="false"
            android:padding="8dp"
            android:scaleType="fitCenter"
            android:src="@drawable/image"
            android:tint="?attr/tint" />


        <ImageButton
            android:id="@+id/link"
            android:layout_width="0dp"
            android:layout_height="48dp"
            android:layout_weight="1"

            android:height="48dp"
            android:background="#00000000"
            android:cropToPadding="false"
            android:padding="8dp"
            android:scaleType="fitCenter"
            android:src="@drawable/link"
            android:tint="?attr/tint" />

        <ImageButton
            android:id="@+id/bold"
            android:layout_width="0dp"
            android:layout_height="48dp"
            android:layout_weight="1"
            android:height="48dp"
            android:background="#00000000"

            android:cropToPadding="false"
            android:padding="8dp"
            android:scaleType="fitCenter"
            android:src="@drawable/bold"
            android:tint="?attr/tint" />

        <ImageButton
            android:id="@+id/italics"
            android:layout_width="0dp"
            android:layout_height="48dp"
            android:layout_weight="1"

            android:height="48dp"
            android:background="#00000000"
            android:cropToPadding="false"
            android:padding="8dp"
            android:scaleType="fitCenter"
            android:src="@drawable/italics"
            android:tint="?attr/tint" />

        <ImageButton
            android:id="@+id/bulletlist"
            android:layout_width="0dp"
            android:layout_height="48dp"
            android:layout_weight="1"
            android:height="48dp"
            android:background="#00000000"
            android:cropToPadding="false"

            android:padding="8dp"
            android:scaleType="fitCenter"
            android:src="@drawable/bullets"
            android:tint="?attr/tint" />

        <ImageButton
            android:id="@+id/numlist"
            android:layout_width="0dp"
            android:layout_height="48dp"
            android:layout_weight="1"
            android:height="48dp"
            android:background="#00000000"

            android:cropToPadding="false"
            android:padding="8dp"
            android:scaleType="fitCenter"
            android:src="@drawable/numbers"
            android:tint="?attr/tint" />

        <ImageButton
            android:id="@+id/quote"
            android:layout_width="0dp"

            android:layout_height="48dp"
            android:layout_weight="1"
            android:height="48dp"
            android:background="#00000000"
            android:cropToPadding="false"
            android:padding="8dp"
            android:scaleType="fitCenter"
            android:src="@drawable/quotes"
            android:tint="?attr/tint" />

        <ImageButton
            android:id="@+id/size"
            android:layout_width="0dp"

            android:layout_height="48dp"
            android:layout_weight="1"
            android:height="48dp"
            android:background="#00000000"
            android:cropToPadding="false"
            android:padding="8dp"
            android:scaleType="fitCenter"
            android:src="@drawable/fontsizedarker"
            android:tint="?attr/tint" />
    </LinearLayout>
</LinearLayout>

删除所有适配器代码(通货膨胀除外)仍会导致明显的滞后. 我真的无法找到答案的深处,任何帮助/提示都将不胜感激.

Removing all the adapter code except for inflation still results in noticeable lag. I really can't find the bottom of this, and any help/tips are greatly appreciated.

一些更多信息:删除数据集隐藏"代码(getRealPosition,hideAll,unhideAll)对RecyclerView的速度没有影响.另外,删除FlowLayout并不能使其更快.

Some more information: Removing the dataset "hiding" code (getRealPosition, hideAll, unhideAll) has no affect on the speed of the RecyclerView. Also, removing the FlowLayout does not make it any faster.

推荐答案

我在RecyclerView上遇到了同样的问题.太懒了.就我而言,RecyclerView中有一个水平的图像按钮列表.

I was having the same problem with RecyclerView. It was laggy. In my case, there was a horizontal list of image buttons inside RecyclerView.

我通过从ImageButtonsImageViews中删除scaleType并通过 Picasso resizing一样:

I solved it by removing the scaleType from ImageButtons or ImageViews and loading images through Picasso with resizing like :

 Picasso.with(context).load(icon.get(position)).resize(270,270).centerCrop().into(holder.iconView);

由于大尺寸图像的运行时缩放或没有,可能会出现延迟问题.图像.不建议这样做.毕加索(Picasso)负责调整大小和有效加载.它还为您处理缓存.

The problem of lag may occur due to runtime scaling of big sized images or no. of images. It is not advisable. Whereas Picasso takes care of resizing, and loading efficiently. Also it handles caching for you.

这篇关于极慢的RecyclerView性能的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆