2

我有一个不是图形密集型的应用程序(因此)。它有 2 个片段,里面都有 2 个 GridView。这就是我所说的 Level-1 活动,因为它们在应用程序打开时立即可见。

现在位于 Fragment #2 内的第二个 GridView 有 3 个项目,其中一个项目打开一个新的 Activity,里面有一个 GridView。这就是我所说的 Level-2 活动,因为它们必须由用户访问。

这个第二级 GridView 有 8 个图像项。这些项目都是相同的大小和形状,但用于它们的图像不是,所以它们被缩放/调整大小等。图像是:

图片 1 - 465x232, 38kb

图片 2 - 512x251, 41kb

图片 3 - 900x379, 68kb

图片 4 - 630x258, 35kb

图片 5 - 700x346, 44kb

图片 6 - 615x409, 24kb

图片 7 - 800x383, 64kb

图片 8 - 400x169, 26kb

网格视图 XML

<GridView
    android:id="@+id/essentials_gridview"
    android:layout_width="fill_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:horizontalSpacing="10dp"
    android:verticalSpacing="10dp"
    android:listSelector="@android:color/transparent"
    android:numColumns="3"
    android:padding="10dp"
    android:stretchMode="columnWidth" />

GridView 项目布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="125dp" >

    <ImageView
        android:id="@+list/grid_item_image_image"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:scaleType="centerCrop" />"

    <TextView
        android:id="@+list/grid_item_image_text"
        android:layout_width="fill_parent"
        android:layout_height="30dp"
        android:layout_alignParentBottom="true"
        android:gravity="center"
        android:textSize="20sp"
        android:textColor="#FFFFFF"
        android:background="#50000000"
        android:singleLine="true"
        android:ellipsize="end" />

</RelativeLayout>

我得到的错误是:

08-10 10:09:42.060: E/dalvikvm-heap(18982): Out of memory on a 9023376-byte allocation.

当我在 1 级和 2 级活动之间来回移动时,就会发生这种情况。几次后,它因该错误而崩溃。

4

2 回答 2

0

看来您有内存泄漏,我建议您观看此会话:

Google I/O 2011:Android 应用程序的内存管理

根据我自己的经验,我建议您在 Gridview 的适配器中实现 ViewHolder 模式。

于 2013-08-10T09:48:22.557 回答
0

我怀疑这个问题与图像处理有关。如果它们很大,您可以尝试使用原始版本的采样版本。您还可以缓存将节省内存的图像。当您在活动之间导航时,图像会一次又一次地加载并消耗内存。

以下链接在这里可能很有用。如果您在加载图像的位置发布示例 Java 代码,则可以指出您的问题。

http://developer.android.com/training/displaying-bitmaps/index.html

http://developer.android.com/training/displaying-bitmaps/manage-memory.html

于 2013-08-10T13:44:17.963 回答