如何通过SOAP发送图像而不会耗尽内存?

时间:2013-02-06 14:09:12

标签: java android memory soap heap

我试图通过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字节分配的内存不足。

0 个答案:

没有答案