2012-04-15 41 views
1

我寫了一個小的Android項目,顯示一些(圖像)按鈕。它在我的手機(Galaxy S)上工作正常,但是當我嘗試在仿真器上運行它時,它會給出以下錯誤: 引起:java.lang.OutOfMemoryError:位圖大小超過VM預算在Android中添加一些圖像按鈕時內存不足異常

請注意,活動,有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> 

你能幫我嗎?

+1

有4K +的問題與「位圖大小超過虛擬機預算「在本網站上... – Mat 2012-04-15 10:11:48

回答

3

你的內存不足,並且彌補,這將是使用更少的內存,裝載較小的圖像將幫助很大的最好方式在這裏,和網上搜尋Android團隊已經還跟提出了一個簡短的說明,關於如何做到這一點:)

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

+0

非常感謝。實際上圖像大小爲500 * 360像素,但其大小不大於80 KB。我想我應該調整它們。 – 2012-04-15 10:17:01

+0

將圖像加載到內存(並縮小它們)後,磁盤上的大小與內存佔用空間不對應。一般情況下,您可以假設任何圖像在將內容載入內存時將使用寬度*高度* 4字節的內存。 – erbsman 2012-04-15 10:53:49

+0

這個鏈接確實有幫助。對於那些正在閱讀的人,請閱讀! – whyoz 2013-04-10 19:23:30

3

定義按鈕的文件有多大(文件大小而不是圖像尺寸)?看起來這些太大了。 Android需要將它們全部加載到主內存中以顯示它們。

我的應用程序,所有這些文件都在0.5〜2kB的範圍

+0

我知道,它們的大小最大爲80 KB。這就是爲什麼它例外嗎? – 2012-04-15 10:14:01

+0

那很可能是你的問題呢,他們應該像Heiko指出的那麼小。 – erbsman 2012-04-15 10:54:56