1

我正在尝试通过 SOAP 从我的 HTC Explorer 发送图像。问题是我遇到了堆内存错误。

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