我在ViewPager
里面有一个RecyclerView
实现,它的性能非常糟糕。 Here's a video of the performance in question.我有两种视图类型,并使用ViewHolder模式(所以它不是通货膨胀或查找导致问题的视图)。极度延迟RecyclerView性能
这里的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并不会让它更快。
您是否在层次结构查看器工具中检出了您的视图层次结构?有一个很好的“简介”按钮,它会显示您的层次结构的度量/布局/绘制时间。您也可以将视图层次转储为图层并在图像编辑器中查看 - 也许您有很多alpha混合?你有没有检查你的“Profile GPU透支”开发者选项有多少透支? [Romain Guy关于Falcon Pro的案例研究](http://www.curious-creature.com/docs/android-performance-case-study-1.html)是开始分析你的UI性能的绝佳文章。 –
非常好的建议!我一定会看看这些工具和罗曼的文章。谢谢! – ccrama
我跟着文章,意识到我有非常高的(4-5)透视图并将其降低到1(好),但滚动仍然像疯了一样落后。我将努力将视图层次结构简化为1-2个视图(希望),我们将看看它是如何发展的。 – ccrama