我正在尝试通过 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 字节时内存不足。