1

HTC Explorer から SOAP 経由で画像を送信しようとしています。問題は、ヒープ メモリ エラーが発生していることです。

02-06 12:54:34.638: D/dalvikvm(29895): GC_FOR_MALLOC 解放 <1K、42% 解放 9815K/16711K、外部 616K/4666K、一時停止 32ms
02-06 12:54:34.688: E/dalvikvm-heap( 29895): 4177936 バイトの割り当てでメモリが不足しています。

私がアプリをテストしている電話には 20MB のヒープがあり、画像は非常に大きい (~4MB) ものです。

私は画像に対して作業を行っています:

Bitmap bitmap = BitmapFactory.decodeFile(imagePath);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 90, stream);
bitmap.recycle();
byte [] byte_arr = stream.toByteArray();

try {
    stream.close();
    stream = null;
} catch (IOException e) {
    e.printStackTrace();
}

String image_str = Base64.encodeBytes(byte_arr);
byte_arr = null;

....次に、エンベロープへのリクエストのプロパティに文字列を入れて、エンベロープを送信します...

httpTransport.call(SOAP_ACTION, envelope);

この asynctask (この作業を行っている) がヒープ サイズを超えたため、この最後の行でエラーが発生します。

メモリ不足にならずに画像を送信する方法を知っている人はいますか?

これは、エラーが発生する前の最後の GC です。

02-06 12:54:34.638: D/dalvikvm(29895): GC_FOR_MALLOC 解放 <1K、42% 解放 9815K/16711K、外部 616K/4666K、一時停止 32ms
02-06 12:54:34.688: E/dalvikvm-heap( 29895): 4177936 バイトの割り当てでメモリが不足しています。

4

0 に答える 0