我在开发人员设置中打开了GPU Overdraw叠加层,发现我的应用程序不是非常优化,我不确定在哪里进行更改以使它更好地工作。这是它的图像。

红色部分都是ListView的一部分,因此我不知道如何在保持相同样式的同时对其进行优化。
这是每个ListView部分的layout.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/background_card"
android:orientation="horizontal"
android:padding="5dip" >

<ImageView
    android:id="@+id/list_image"
    android:layout_width="50dip"
    android:layout_height="50dip"
    android:src="@drawable/gta5thumb"
    android:padding="3dip"
    android:background="@drawable/image_bg"
    android:layout_centerVertical="true"/>





<TextView
    android:id="@+id/title"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignTop="@id/list_image"
    android:layout_toRightOf="@id/list_image"
    android:text="Grand Theft Auto 5"
    android:textColor="#040404"
    android:textSize="18sp"

    android:layout_marginLeft="4dp"
    android:textStyle="bold"/>

<TextView
    android:id="@+id/date1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/title"
    android:textColor="#343434"
    android:textSize="14sp"
    android:layout_marginTop="1dip"
    android:layout_toRightOf="@id/list_image"
    android:layout_marginLeft="4dp"
    android:text="17th September 2013" />
<TextView
    android:id="@+id/date2"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/date1"
    android:textColor="#343434"
    android:textSize="14sp"
    android:layout_marginTop="1dip"
    android:visibility="visible"
    android:layout_marginLeft="4dp"
    android:layout_toRightOf="@id/list_image"
    android:text="17th September 2013" />
<TextView
    android:id="@+id/date3"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textColor="#343434"
    android:textSize="14sp"
    android:layout_marginLeft="4dp"
    android:text="17th September 2013"
    android:layout_below="@+id/date2"
    android:layout_toRightOf="@+id/list_image"/>

<TextView
    android:id="@+id/platforms"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_alignTop="@id/title"
    android:gravity="right"
    android:text="360, PS3"
    android:layout_marginRight="3dip"
    android:textSize="12sp"
    android:textColor="#10bcc9"
    android:textStyle="bold"/>

 <!-- Rightend Arrow -->
 <ImageView android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/arrow"
    android:layout_alignParentRight="true"
    android:layout_centerVertical="true"/>

</RelativeLayout>

我真的对解决这个问题很迷失,很高兴提供您可能希望帮助缓解正在发生的GPU Overdraw的任何其他文件。我不确定该怎么做,因为它是ListView,因此不能轻易更改。请记住,样式需要保持尽可能接近。

最佳答案

您的行的RelativeLayout和子级似乎不是问题。相反,这是他们背后的东西。

您应该在诊断jank上阅读Romain Guy's epic blog post(或在:: cough::广受好评的Android开发人员书籍中进行类似的介绍)。具体来说,使用层次 View 确定分层的内容,并尝试完全消除不必要的层,或者如果它们的颜色完全与Z轴上的更高部分重叠,则至少使它们透明。

其中一些可能需要更改设计,或者可能需要很大的复杂性才能实现当前外观。例如,您的padding的5dip导致ListView插入页面内,这意味着其后面的所有内容都会在边缘窥视。因此,您不能摆脱它背后的东西,也不能使其完全透明,因为它对用户是可见的。您可能可以找到一种方法,其中仅存在5dip边框,内部是透明的,但这可能会造成困惑。

其他东西可能更容易维修。例如,下面带有蓝色区域的绿色 strip 表示您的绿色 strip 是View,位于页面背景的大部分区域上。如果可以将它们垂直堆叠而不是重叠,则可以消除一小部分 overdraw 现象。

(当然,这样做可能是ViewPager,因为我猜您在这里使用ViewPager,而且我从未在基于ViewPager的UI上检查过绘)

10-08 12:57