2010-05-28 60 views
53

Possible Duplicate:
Android: Strange out of memory issue while loading an image to a Bitmap object的OutOfMemoryError:位圖大小超過VM預算: - 安卓

我是從網址下載圖片並顯示它們。在下載時,它給予out of memory error : bitmap size exceeds VM budget。我使用drawable。代碼如下:

HttpClient httpclient= new DefaultHttpClient(); 
HttpResponse response=(HttpResponse)httpclient.execute(httpRequest); 
HttpEntity entity= response.getEntity(); 
BufferedHttpEntity bufHttpEntity=new BufferedHttpEntity(entity); 
InputStream instream = bufHttpEntity.getContent(); 

Bitmap bm = BitmapFactory.decodeStream(instream); 
Bitmap useThisBitmap = Bitmap.createScaledBitmap(bm,bm.getWidth(),bm.getHeight(), true); 
bm.recycle(); 
BitmapDrawable bt= new BitmapDrawable(useThisBitmap); 
System.gc(); 

以下是錯誤:05-28 14:55:47.251: ERROR/AndroidRuntime(4188): java.lang.OutOfMemoryError: bitmap size exceeds VM budget

+0

圖像有多大? – 2010-05-28 09:54:10

+0

嗨,, Marcelo Cantos !!! ..高度和圖像的寬度= 320x320 – Andy 2010-05-28 10:09:28

+0

找出你有多少種方式可以獲取圖像,以便你找不到內存問題 – 2010-05-28 10:23:13

回答

2

這個問題似乎已經報道了好幾次,herehere例如... 對不起Shalini但如果是同樣的問題,它似乎有沒有解決方案?

羅曼蓋伊的唯一建議是to use less memory...

所以,運氣好能想到你的東西不同ly ...

+3

有一個解決方案:使用比允許的最大內存少的內存。我知道這是一個令人沮喪的答案,但手機沒有像桌面機器那樣的「無限量」內存。你必須要小心。 – 2010-05-28 17:35:14

+0

不知道你是來堆棧;)​​ 正如我所說,你的建議是使用更少的內存... 你會建議做什麼呢?減少圖片的大小? – Sephy 2010-05-29 22:32:42

31

使用decodeStream(is, outPadding, opts)

BitmapFactory.Options opts=new BitmapFactory.Options(); 
opts.inDither=false;      //Disable Dithering mode 
opts.inPurgeable=true;     //Tell to gc that whether it needs free memory, the Bitmap can be cleared 
opts.inInputShareable=true;    //Which kind of reference will be used to recover the Bitmap data after being clear, when it will be used in the future 
opts.inTempStorage=new byte[32 * 1024]; 
+0

謝謝,我的應用程序正在工作! – jucajl 2013-08-16 06:43:09

+2

謝謝,正在尋找一個月的解決方案 – sanjeev 2013-09-11 07:32:55

-2

這是一個實用的答案,我試圖避免在運行時這個問題。它也解決了我的問題。

Runtime.getRuntime().gc(); 

調用垃圾收集器是一個好主意。

+6

這並沒有明確地調用垃圾收集器,但它建議虛擬機來做。 – caw 2012-03-10 18:34:52

+0

如果你正在泄漏記憶,這將不會做任何事情。垃圾收集只回收沒有其他任何東西掛在對它們的引用上的對象。 – 2013-02-04 21:42:12

0

事實上,在某些Android版本中存在一個BUG,特別是2.1版本一直出現這樣的問題。

我發佈了一個應用程序,在這個應用程序中,我在資源使用上花了很多心思。我甚至已經刪除了許多我正在使用的位圖,現在它們都是使用圖形原語實時創建的。我還回收位圖時不使用它們。當然,我已經檢查過我的應用程序中沒有內存泄漏:使用的內存不會在沒有控制的情況下增長,它始終保持在合理的值內。

雖然我在嘗試避免這個問題上投入了大量精力,但我仍然從2.1和2.1-update1設備中獲得了許多惱人的異常。我現在正在使用暴力來報告崩潰事件,而且我已經看到,即使應用程序僅使用4 MB RAM,這比每個Android設備必須具有的應用程序堆大小16M少四倍,也會發生這種情況,事實上,目前大多數設備的堆大小都大於16M-。

我所有的位圖大小都是800x480像素,在最壞的情況下,ARGB_8888可能每個都不會佔用超過1.5MB的空間,但是當佔用4兆字節時,它會崩潰嘗試加載一個,所以應該有至少另有12 MB免費。而且我的大部分Bitmaps加載爲佔用一半內存的ARGB_4444,當位圖與4444差別很大時,我只使用ARGB_8888.

因此,對於我來說很明顯,這些Android版本中有一些是不能正常工作。 99.9%的崩潰來自2.1和2.1更新,其餘可能由其他準時原因解釋。

0

我試過很多東西,這是有效的。

BitmapFactory.Options opts=new BitmapFactory.Options(); 
opts.inDither=false;      //Disable Dithering mode 
opts.inPurgeable=true;   
opts.inScale=8; 
///after you use your images 
System.gc(); 
+1

請求垃圾收集不會清理內存泄漏。 – 2013-02-04 21:42:51

相關問題