0

私のアプリは、サーバーから画像データを XML として受け取ります。XML のペアリング中に、StringBuilder を使用してデータを追加し、画像データをデコードしてから画像を表示します。イメージ サイズが 1 MB を超える場合、以下のように Dalvik-vm の「メモリ不足」例外が発生します。

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 アプリに割り当てられるヒープ メモリは最小で 16 MB です。私の場合、画像サイズが 1MB ~ 2MB でクラッシュします。どんな助けでも大歓迎です。

ありがとう、DK

4

1 に答える 1

-1

画像をダウンサンプリングする必要があります。画像はH x W x 4 bytes表示されるのにおよそのメモリを使用するため、「ファイル サイズ」はメモリ内の実際のサイズを実際には反映していないことに注意してください。画面に収まるのに必要なだけの大きさになるように、画像をダウンサンプリングする必要があります。

この前の回答を参照してください

于 2012-07-16T20:05:26.197 に答える