2012-07-16 51 views
0

我的應用程序以XML形式從服務器接收圖像數據。在配對XML期間,我使用StringBuilder追加數據,解碼圖像數據,然後顯示圖像。如果圖像大小超過1MB越大,我得到的Dalvik虛擬機「內存不足」,如下例外:Dalvik-vm在使用StringBuilder附加字符串時內存不足

07-16 19:23:35.376: E/dalvikvm-heap(374): Out of memory on a 10501076-byte allocation. 
07-16 19:23:35.376: I/dalvikvm(374): "AsyncTask #2" prio=5 tid=10 RUNNABLE 
07-16 19:23:35.376: I/dalvikvm(374): | group="main" sCount=0 dsCount=0 obj=0x405e3238 self=0x38ff88 
07-16 19:23:35.376: I/dalvikvm(374): | sysTid=434 nice=10 sched=0/0 cgrp=bg_non_interactive handle=3735744 
07-16 19:23:35.376: I/dalvikvm(374): | schedstat=(3989536323 3728953745 437) 
07-16 19:23:35.376: I/dalvikvm(374): at java.lang.AbstractStringBuilder.enlargeBuffer(AbstractStringBuilder.java:~95) 
07-16 19:23:35.376: I/dalvikvm(374): at java.lang.AbstractStringBuilder.append0(AbstractStringBuilder.java:153) 
07-16 19:23:35.376: I/dalvikvm(374): at java.lang.StringBuilder.append(StringBuilder.java:217) 
07-16 19:23:35.376: I/dalvikvm(374): at os.android.lib.asgsuitesdk.XmlReader.characters(XmlReader.java:121) 
07-16 19:23:35.376: I/dalvikvm(374): at org.apache.harmony.xml.ExpatParser.text(ExpatParser.java:165) 
07-16 19:23:35.376: I/dalvikvm(374): at org.apache.harmony.xml.ExpatParser.appendBytes(Native Method) 
07-16 19:23:35.376: I/dalvikvm(374): at org.apache.harmony.xml.ExpatParser.parseFragment(ExpatParser.java:518) 
07-16 19:23:35.376: I/dalvikvm(374): at org.apache.harmony.xml.ExpatParser.parseDocument(ExpatParser.java:479) 
07-16 19:23:35.376: I/dalvikvm(374): at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:318) 
07-16 19:23:35.376: I/dalvikvm(374): at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:275) 
07-16 19:23:35.376: I/dalvikvm(374): at javax.xml.parsers.SAXParser.parse(SAXParser.java:390) 

反正是有,我可以擺脫這個異常的,我知道,取決於設備,分配給一個Android應用程序的堆內存最小16MB。在我的情況下,圖像大小爲1MB〜2MB之間和它崩潰。任何幫助表示高度讚賞。

感謝, DK

+0

你必須檢查你的代碼的另一個內存泄漏引起的1Mb分配不應該成爲問題。 – Egor 2012-07-16 19:33:09

+2

看看你的例外信息。它表示「10501076字節分配的內存不足」。它試圖分配10 MB,而不是2或3 MB。 – tiguchi 2012-07-16 19:54:52

回答

-1

你必須下采樣請記住,圖像將使用大約H x W x 4 bytes的內存來顯示,所以「文件大小」並不真正參考在內存中查看實際大小。您必須對圖像進行縮減採樣,以便只需將圖像放入屏幕即可。

this previous answer