Android 使用包含大量文本视图的relativeLayout显示性能

Android 使用包含大量文本视图的relativeLayout显示性能,android,android-layout,Android,Android Layout,我在使用包含153个TextView的RelativeLayout(包装到ScrollView中)时遇到性能问题。每个TextView都有一个9补丁背景 主要布局: <ScrollView android:id="@+id/forum_accueil_ScrollView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@colo

我在使用包含153个TextView的RelativeLayout(包装到ScrollView中)时遇到性能问题。每个TextView都有一个9补丁背景

主要布局:

<ScrollView 
    android:id="@+id/forum_accueil_ScrollView"
    android:layout_width="fill_parent" android:layout_height="fill_parent"
    android:background="@color/white">
    <RelativeLayout android:id="@+id/forum_accueil_RelativeLayout"
        android:layout_width="fill_parent" android:layout_height="fill_parent"
        android:background="@color/white">
    </RelativeLayout>
</ScrollView>

RelativeLayout以编程方式填充TextView(项目计数和描述来自WS)。每个TextView都有一个9patch背景选择器。文本视图描述如下:

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content" android:layout_height="35dip"
    android:textColor="@color/myblue"
    android:textStyle="bold"
    android:gravity="center_vertical" android:layout_gravity="center_vertical"
    android:background="@drawable/selector_forum_accueil_item">
</TextView>

最后,我有一个包含153个TextView的RelativeLayout。显示和滚动非常慢。即使重新开始这项活动也需要一些时间

我打开了层次结构查看器,ScrollView的显示时间如下:

测量:28毫秒 布局:1.2ms 抽签:18毫秒

有没有办法加快显示速度和响应速度?单个RelativeLayout包含尽可能多的视图是最好的方法吗(我尝试用这种技术尽可能地扁平层次结构)?
我试着删除9补丁的背景进行测试,它似乎更具响应性。为什么?

这是一个淫秽的文本浏览量。此时,请使用ListView。您的RelativeLayout(在本例中)为您做了哪些ListView不能做的事情

你的问题很清楚:为什么去掉9块背景后渲染/布局时间的响应性会更高?实际上有两个很好的答案:

  • 与使用包含背景属性的样式相比,指定背景属性要慢得多。样式由GPU缓存,因此GPU已经知道背景并使用它。如果不指定样式,则仍将使用样式(默认样式),并且该样式确实包含某种背景,这将首先应用。然后应用视图特定属性,即重新渲染指定的背景
  • 9面片图像可能需要更长的时间才能渲染。再加上您要求将其渲染153次,性能将以指数级下降。我现在正在看一个例子,在这个例子中,我看到“常规”。png位图在1.5毫秒内渲染,而在同一布局中,一个非常简单的9-patch在45毫秒时要慢30倍

  • 注意:9面片渲染通常(但并非总是)受到占渲染时间80%的GC周期的影响。在某些情况下,我看到此GC循环是在渲染其他位图/光栅图像时发生的,但在9面片渲染过程中似乎发生得更频繁。

    这很慢,因为您需要绘制153个视图!adapter视图的优点在于,它们只绘制当时需要的内容。您正在绘制所有视图,绝大多数视图当时都没有被查看。我需要允许用户使用触摸和轨迹球导航所有这些文本视图,我担心带有单元格的ListView不允许我使其完全相同。这就是列表视图的观点。列出大量类似的项目。是的,但它能准确地作为一个相对布局吗?它能在ScrollView中作为相对物处理导航吗?在触摸模式下,我想我能做到,但铲球不确定……你的意思是:“它能在滚动视图中处理相对导航吗?”?使用轨迹球,当你向下滚动时,它将选择列表中的下一项。让我问一个更好的问题。你是如何组织这些观点的?您是使用循环单步执行,只是将下一个视图添加到RL,还是手动执行,并将每个视图分别添加到其自己的唯一位置?您如何处理这些值得RL的视图?