7

我在开发人员设置中打开了 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,因此不能轻易更改。请记住,样式需要尽可能接近。

4

1 回答 1

5

您的行的RelativeLayoutand 子项似乎不是问题。相反,它是他们背后的东西。

您应该阅读Romain Guy 的关于诊断 jank 的史诗般的博文(或::cough::广受好评的 Android 开发人员书籍中的类似报道)。具体来说,使用 Hierarchy View 来确定什么是分层的,并尝试彻底去除不必要的图层,或者如果它们的颜色与 Z 轴上更高的东西完全重叠,至少使它们透明。

其中一些可能需要更改您的设计,或者可能需要在实现当前外观方面非常复杂。例如,您5dip的 padding 导致ListView在页面内插入,这意味着它后面的任何内容都可以从边缘窥视。因此,你不能摆脱它背后的东西,或者让它完全透明,因为它对用户是可见的。你也许可以找到一种方法,只5dip存在边界,内部是透明的,但这可能会变得混乱。

其他东西可能更容易修复。例如,下方带有蓝色区域的绿色条带表明您的绿色条带是View在大部分页面背景上分层的。如果您可以使它们垂直堆叠而不是重叠,那将消除一点过度绘制。

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

于 2013-07-22T11:04:52.047 回答