添加一些图像按钮时Android中的内存不足异常

时间:2012-04-15 10:06:40

标签: android

我写了一个小的Android项目,显示了一些(图像)按钮。它在我的手机(Galaxy S)上工作正常,但是当我尝试在模拟器上运行它时,它会出现以下错误: 引起:java.lang.OutOfMemoryError:位图大小超过VM预算

请注意,第一个活动,有8个图像按钮,它会给出内存不足异常。当我删除3个按钮时,它工作正常。实际上,只要scrollView是不可兼容的,它就可以正常运行。如果我添加这3个删除的按钮(因此,scrollView将会可见),它会给出内存不足错误。我想,这"内存不足"异常与(图像)按钮的数量无关,但与背景图像有关。这是我的XML文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/rootid"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

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

        <ImageView
            android:id="@+id/image"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:scaleType="center"
            android:src="@drawable/backgrounmobile" />

        <ScrollView
            android:id="@+id/ScrollView01"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_gravity="left|top|bottom|right" >

            <LinearLayout
                xmlns:android="http://schemas.android.com/apk/res/android"
                android:id="@+id/centerlayout"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="right|top|bottom"
                android:layout_marginBottom="10dip"
                android:layout_marginLeft="10dip"
                android:layout_marginRight="20dip"
                android:layout_marginTop="0dip"
                android:orientation="vertical" >

                <Button
                    android:id="@+id/divan"
                    android:layout_width="160dip"
                    android:layout_height="110dip"
                    android:layout_gravity="center|top"
                    android:background="@drawable/divanbtn" />

                <Button
                    android:id="@+id/boostan"
                    android:layout_width="160dip"
                    android:layout_height="110dip"
                    android:layout_gravity="center|top"
                    android:background="@drawable/boostanbtn" />

                <Button
                    android:id="@+id/mavaez"
                    android:layout_width="160dip"
                    android:layout_height="110dip"
                    android:layout_gravity="center|top"
                    android:background="@drawable/mavaezbtn" />

                <Button
                    android:id="@+id/hekayat"
                    android:layout_width="160dip"
                    android:layout_height="110dip"
                    android:layout_gravity="center|top"
                    android:background="@drawable/hekayatbtn" />

                <Button
                    android:id="@+id/saadiname"
                    android:layout_width="160dip"
                    android:layout_height="110dip"
                    android:layout_gravity="center|top"
                    android:background="@drawable/saadinamebtn" />

                <Button
                    android:id="@+id/settings"
                    android:layout_width="160dip"
                    android:layout_height="110dip"
                    android:layout_gravity="center|top"
                    android:background="@drawable/settingsbtn" />

                <Button
                    android:id="@+id/about"
                    android:layout_width="160dip"
                    android:layout_height="110dip"
                    android:layout_gravity="center|top"
                    android:background="@drawable/aboutbtn" />
            </LinearLayout>
        </ScrollView>
    </FrameLayout>

</LinearLayout>

你能帮帮我吗?

3 个答案:

答案 0 :(得分:3)

定义按钮的文件有多大(文件大小,而不是图像尺寸)?看起来这些太大了。 Android需要将它们全部加载到主内存中才能显示它们。

对于我的应用,所有这些文件都在0.5~2kB范围内

答案 1 :(得分:3)

你的内存运行不足,最好的补救方法就是减少使用内存,加载较小的图像会对这里有很大的帮助,谷歌的android团队已经很友好地提出了一个简短的描述如何这样做:))

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

答案 2 :(得分:1)