android-非常滞后的RecyclerView性能

我在ViewPager内部有一个RecyclerView实现,它的性能非常糟糕. Here’s a video of the performance in question.我有两种视图类型,并且正在使用ViewHolder模式(因此它不是通货膨胀或导致问题的视图).

Here’s the adapter.

这是cardview.xml文件

<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>

删除除通货膨胀以外的所有适配器代码仍会导致明显的滞后.
我真的找不到这个的底部,非常感谢任何帮助/提示.

编辑:更多信息:删除数据集“隐藏”代码(getRealPosition,hideAll,unhideAll)对RecyclerView的速度没有影响.另外,删除FlowLayout不会使其更快.

解决方法:

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

我通过从ImageButtons或ImageViews中删除scaleType并通过大小调整为Picasso加载图像来解决了这个问题:

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

滞后问题可能是由于运行时缩放大尺寸图像而导致的.图片.不建议这样做.毕加索(Picasso)负责调整大小和有效加载.它还为您处理缓存.

上一篇:杭电2029


下一篇:UIWindow