我有一个非图形密集的应用程序(如此)。它有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级活动之间来回移动时会发生这种情况。几次之后,它崩溃了那个错误。
答案 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