サーバーから画像をロードしているAndroidアプリケーションがあります。サーバーは画像を base64 形式の XML で送信します。この base64 をバイト配列にデコードすると、メモリ不足エラーが発生します。これは、ヒープ メモリが少ないいくつかのデバイスで発生しています。この場合の回避策は何ですか?
else if (this.returnClass == byte[].class) {
if (!xr.isEmptyElementTag()) {
retVal = Base64.decode(xr.nextText(), Base64.NO_WRAP);
System.gc();
xr.nextTag();
}
エラーログは言う
{05-22 10:19:47.474: D/dalvikvm(2421): GC_FOR_MALLOC freed 0 objects / 0 bytes in 55ms
05-22 10:19:47.474: E/dalvikvm-heap(2421): Out of memory on a 5095368-byte allocation.
05-22 10:19:47.474: I/dalvikvm(2421): "ModernAsyncTask #5" prio=5 tid=14 RUNNABLE
05-22 10:19:47.474: I/dalvikvm(2421): | group="main" sCount=0 dsCount=0 s=N obj=0x4481c6f0 self=0x300de8
05-22 10:19:47.474: I/dalvikvm(2421): | sysTid=2546 nice=10 sched=0/0 cgrp=bg_non_interactive handle=3149608
05-22 10:19:47.474: I/dalvikvm(2421): | schedstat=( 282605471378 64045071861 48652 )
05-22 10:19:47.474: I/dalvikvm(2421): at java.nio.HeapByteBuffer.<init>(HeapByteBuffer.java:~45)
05-22 10:19:47.474: I/dalvikvm(2421): at java.nio.ReadWriteHeapByteBuffer.<init>(ReadWriteHeapByteBuffer.java:47)
05-22 10:19:47.474: I/dalvikvm(2421): at java.nio.BufferFactory.newByteBuffer(BufferFactory.java:49)
05-22 10:19:47.474: I/dalvikvm(2421): at java.nio.ByteBuffer.allocate(ByteBuffer.java:52)
05-22 10:19:47.474: I/dalvikvm(2421): at java.nio.charset.CharsetEncoder.encode(CharsetEncoder.java:317)
05-22 10:19:47.474: I/dalvikvm(2421): at java.nio.charset.Charset.encode(Charset.java:692)
05-22 10:19:47.474: I/dalvikvm(2421): at java.lang.String.getBytes(String.java:903)
05-22 10:19:47.474: I/dalvikvm(2421): at android.util.Base64.decode(Base64.java:118)}