Android - 应用程序因内存错误而崩溃

时间:2013-08-10 09:11:37

标签: android memory gridview crash

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

现在位于片段#2内的第二个GridView有3个项目,其中一个项目打开一个新的活动,里面有一个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

GridView 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级活动之间来回移动时会发生这种情况。几次之后,它崩溃了那个错误。

2 个答案:

答案 0 :(得分:0)

好像你有内存泄漏,我建议你观看这个会话:

Google I/O 2011: Memory management for Android Apps

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

答案 1 :(得分:0)

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

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

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

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