2
우리가 서버 (HTTP POST를 통해) PDF 파일을 보낼 때 우리는 안드로이드에 대한 응용 프로그램을 프로그래밍하고있다가, 응용 프로그램 충돌이 예외가 표시됩니다 : 오류OutOfMemoryError를 전송 PDF HTTP 포스트
09-14 15:31:59.253: D/dalvikvm(22978): GC_EXPLICIT freed 437 objects/1236120 bytes in 47ms
09-14 15:31:59.296: D/dalvikvm(22978): GC_FOR_MALLOC freed 29 objects/1648 bytes in 45ms
09-14 15:31:59.316: I/dalvikvm-heap(22978): Grow heap (frag case) to 13.987MB for 5171605-byte allocation
09-14 15:31:59.359: D/dalvikvm(22978): GC_FOR_MALLOC freed 0 objects/0 bytes in 40ms
09-14 15:31:59.394: D/dalvikvm(22978): GC_FOR_MALLOC freed 2 objects/48 bytes in 27ms
09-14 15:31:59.410: I/dalvikvm-heap(22978): Grow heap (frag case) to 20.563MB for 6895468-byte allocation
09-14 15:31:59.453: D/dalvikvm(22978): GC_FOR_MALLOC freed 0 objects/0 bytes in 41ms
09-14 15:32:00.089: D/dalvikvm(22978): GC_FOR_MALLOC freed 5 objects/120 bytes in 23ms
09-14 15:32:00.117: I/dalvikvm-heap(22978): Grow heap (frag case) to 33.715MB for 13790920-byte allocation
09-14 15:32:00.164: D/dalvikvm(22978): GC_FOR_MALLOC freed 0 objects/0 bytes in 43ms
09-14 15:32:00.214: D/dalvikvm(22978): GC_FOR_MALLOC freed 13 objects/6895864 bytes in 26ms
09-14 15:32:00.214: I/dalvikvm-heap(22978): Forcing collection of SoftReferences for 13790920-byte allocation
09-14 15:32:00.242: D/dalvikvm(22978): GC_FOR_MALLOC freed 0 objects/0 bytes in 25ms
09-14 15:32:00.242: E/dalvikvm-heap(22978): Out of memory on a 13790920-byte allocation.
09-14 15:32:00.242: I/dalvikvm(22978): "main" prio=5 tid=1 RUNNABLE JIT
09-14 15:32:00.242: I/dalvikvm(22978): | group="main" sCount=0 dsCount=0 s=N obj=0x4001d8b0 self=0xcd28
09-14 15:32:00.242: I/dalvikvm(22978): | sysTid=22978 nice=0 sched=0/0 cgrp=default handle=-1345017808
09-14 15:32:00.242: I/dalvikvm(22978): at java.nio.HeapByteBuffer.<init>(HeapByteBuffer.java:~45)
09-14 15:32:00.242: I/dalvikvm(22978): at java.nio.ReadWriteHeapByteBuffer.<init>(ReadWriteHeapByteBuffer.java:47)
09-14 15:32:00.242: I/dalvikvm(22978): at java.nio.BufferFactory.newByteBuffer(BufferFactory.java:49)
09-14 15:32:00.242: I/dalvikvm(22978): at java.nio.ByteBuffer.allocate(ByteBuffer.java:52)
09-14 15:32:00.242: I/dalvikvm(22978): at java.nio.charset.CharsetEncoder.encode(CharsetEncoder.java:317)
09-14 15:32:00.242: I/dalvikvm(22978): at java.nio.charset.Charset.encode(Charset.java:692)
09-14 15:32:00.242: I/dalvikvm(22978): at java.lang.String.getBytes(String.java:903)
09-14 15:32:00.242: I/dalvikvm(22978): at vetic.iventory.cds.CustomEntity.getContentLength(CustomEntity.java:69)
09-14 15:32:00.242: I/dalvikvm(22978): at org.apache.http.protocol.RequestContent.process(RequestContent.java:79)
09-14 15:32:00.242: I/dalvikvm(22978): at org.apache.http.protocol.BasicHttpProcessor.process(BasicHttpProcessor.java:290)
09-14 15:32:00.242: I/dalvikvm(22978): at org.apache.http.protocol.HttpRequestExecutor.preProcess(HttpRequestExecutor.java:160)
09-14 15:32:00.242: I/dalvikvm(22978): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:464)
09-14 15:32:00.242: I/dalvikvm(22978): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
09-14 15:32:00.242: I/dalvikvm(22978): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
09-14 15:32:00.242: I/dalvikvm(22978): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
09-14 15:32:00.242: I/dalvikvm(22978): at vetic.iventory.cds.CustomHttpClient.executeHttpCustomPost(CustomHttpClient.java:111)
09-14 15:32:00.242: I/dalvikvm(22978): at sql.vetil.edel.EtatDesLieuxBDD.sendFile(EtatDesLieuxBDD.java:176)
09-14 15:32:00.242: I/dalvikvm(22978): at sql.vetil.edel.EtatDesLieuxBDD.getReturnServer(EtatDesLieuxBDD.java:212)
09-14 15:32:00.242: I/dalvikvm(22978): at vetic.iventory.cds.P8$3.onClick(P8.java:224)
09-14 15:32:00.242: I/dalvikvm(22978): at android.view.View.performClick(View.java:2408)
09-14 15:32:00.246: I/dalvikvm(22978): at android.view.View$PerformClick.run(View.java:8818)
09-14 15:32:00.246: I/dalvikvm(22978): at android.os.Handler.handleCallback(Handler.java:587)
09-14 15:32:00.246: I/dalvikvm(22978): at android.os.Handler.dispatchMessage(Handler.java:92)
09-14 15:32:00.246: I/dalvikvm(22978): at android.os.Looper.loop(Looper.java:123)
09-14 15:32:00.246: I/dalvikvm(22978): at android.app.ActivityThread.main(ActivityThread.java:4627)
09-14 15:32:00.246: I/dalvikvm(22978): at java.lang.reflect.Method.invokeNative(Native Method)
09-14 15:32:00.246: I/dalvikvm(22978): at java.lang.reflect.Method.invoke(Method.java:521)
09-14 15:32:00.246: I/dalvikvm(22978): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
09-14 15:32:00.246: I/dalvikvm(22978): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
09-14 15:32:00.246: I/dalvikvm(22978): at dalvik.system.NativeStart.main(Native Method)
09-14 15:32:00.246: D/AndroidRuntime(22978): Shutting down VM
09-14 15:32:00.246: W/dalvikvm(22978): threadid=1: thread exiting with uncaught exception (group=0x4001d7d0)
09-14 15:32:00.253: E/AndroidRuntime(22978): FATAL EXCEPTION: main
09-14 15:32:00.253: E/AndroidRuntime(22978): java.lang.OutOfMemoryError
09-14 15:32:00.253: E/AndroidRuntime(22978): at java.nio.HeapByteBuffer.<init>(HeapByteBuffer.java:45)
09-14 15:32:00.253: E/AndroidRuntime(22978): at java.nio.ReadWriteHeapByteBuffer.<init>(ReadWriteHeapByteBuffer.java:47)
09-14 15:32:00.253: E/AndroidRuntime(22978): at java.nio.BufferFactory.newByteBuffer(BufferFactory.java:49)
09-14 15:32:00.253: E/AndroidRuntime(22978): at java.nio.ByteBuffer.allocate(ByteBuffer.java:52)
09-14 15:32:00.253: E/AndroidRuntime(22978): at java.nio.charset.CharsetEncoder.encode(CharsetEncoder.java:317)
09-14 15:32:00.253: E/AndroidRuntime(22978): at java.nio.charset.Charset.encode(Charset.java:692)
09-14 15:32:00.253: E/AndroidRuntime(22978): at java.lang.String.getBytes(String.java:903)
09-14 15:32:00.253: E/AndroidRuntime(22978): at vetic.iventory.cds.CustomEntity.getContentLength(CustomEntity.java:69)
09-14 15:32:00.253: E/AndroidRuntime(22978): at org.apache.http.protocol.RequestContent.process(RequestContent.java:79)
09-14 15:32:00.253: E/AndroidRuntime(22978): at org.apache.http.protocol.BasicHttpProcessor.process(BasicHttpProcessor.java:290)
09-14 15:32:00.253: E/AndroidRuntime(22978): at org.apache.http.protocol.HttpRequestExecutor.preProcess(HttpRequestExecutor.java:160)
09-14 15:32:00.253: E/AndroidRuntime(22978): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:464)
09-14 15:32:00.253: E/AndroidRuntime(22978): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
09-14 15:32:00.253: E/AndroidRuntime(22978): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
09-14 15:32:00.253: E/AndroidRuntime(22978): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
09-14 15:32:00.253: E/AndroidRuntime(22978): at vetic.iventory.cds.CustomHttpClient.executeHttpCustomPost(CustomHttpClient.java:111)
09-14 15:32:00.253: E/AndroidRuntime(22978): at sql.vetil.edel.EtatDesLieuxBDD.sendFile(EtatDesLieuxBDD.java:176)
09-14 15:32:00.253: E/AndroidRuntime(22978): at sql.vetil.edel.EtatDesLieuxBDD.getReturnServer(EtatDesLieuxBDD.java:212)
09-14 15:32:00.253: E/AndroidRuntime(22978): at vetic.iventory.cds.P8$3.onClick(P8.java:224)
09-14 15:32:00.253: E/AndroidRuntime(22978): at android.view.View.performClick(View.java:2408)
09-14 15:32:00.253: E/AndroidRuntime(22978): at android.view.View$PerformClick.run(View.java:8818)
09-14 15:32:00.253: E/AndroidRuntime(22978): at android.os.Handler.handleCallback(Handler.java:587)
09-14 15:32:00.253: E/AndroidRuntime(22978): at android.os.Handler.dispatchMessage(Handler.java:92)
09-14 15:32:00.253: E/AndroidRuntime(22978): at android.os.Looper.loop(Looper.java:123)
09-14 15:32:00.253: E/AndroidRuntime(22978): at android.app.ActivityThread.main(ActivityThread.java:4627)
09-14 15:32:00.253: E/AndroidRuntime(22978): at java.lang.reflect.Method.invokeNative(Native Method)
09-14 15:32:00.253: E/AndroidRuntime(22978): at java.lang.reflect.Method.invoke(Method.java:521)
09-14 15:32:00.253: E/AndroidRuntime(22978): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
09-14 15:32:00.253: E/AndroidRuntime(22978): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
09-14 15:32:00.253: E/AndroidRuntime(22978): at dalvik.system.NativeStart.main(Native Method)
09-14 15:32:19.394: I/Process(22978): Sending signal. PID: 22978 SIG: 9
09-14 15:32:19.554: D/dalvikvm(23043): GC_EXTERNAL_ALLOC freed 973 objects/71752 bytes in 31ms
09-14 15:32:21.046: W/KeyCharacterMap(23043): No keyboard for id 0
09-14 15:32:21.046: W/KeyCharacterMap(23043): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
보낼 데이터의 크기를 계산하는 데 사용이 단편에서 발생된다 (즉, 파일이 계속 전송할 준비가되지 수단)
try {
size++;
File f = new File(complexParametres.get(key)); // File to send
InputStream is = new FileInputStream(f);
System.gc();
byte b[] = new byte[(int) f.length()];
is.read(b);
size += Base64.encodeBytes(b).getBytes().length; // Parameter encoded in Base64
is.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
오류가이 라인이다
size += Base64.encodeBytes(b).getBytes().length;
이 문제를 방지하는 방법을 알고 계십니까?
대단히 감사합니다.
스트림은 작은 데이터 청크 읽기/쓰기를 지원합니다. 모든 것을 메모리로 읽어서 인코딩하고 보내면 안됩니다. 청크 읽기, 인코딩 및 보내기 및 완료 될 때까지 반복 – zapl
@zapl이 말한 것,''android.util.Base64OutputStream''을 확인하십시오. – harism
힙 크기가 보통 16-40MB 범위 인 장치에서 13790920 바이트 ~ 13790KB ~ 13MB의 힙을 장치에 할당하려고하면 오류가 발생하는 것으로 나타납니다. 다른 사람들이 말했듯이, 즉시 할당하지 마십시오. 또한 GPRS 연결이 64kbit/s 일 수 있다고 (송신하기 위해) 고려하십시오. –