0

I get data from the server as:

HttpTransportSE androidhttpTranport = new HttpTransportSE(URL, ContantSystem.TimeOut);
androidhttpTranport.call(SOAP_ACTIONS, envelope);
Object responseBody = responseBody = envelope.getResponse();

My app shows an exceiption:

11-07 19:54:41.283: E/AndroidRuntime(10620): FATAL EXCEPTION: Thread-1851
11-07 19:54:41.283: E/AndroidRuntime(10620): java.lang.OutOfMemoryError
11-07 19:54:41.283: E/AndroidRuntime(10620):    at java.lang.String.<init>(String.java:432)
11-07 19:54:41.283: E/AndroidRuntime(10620):    at java.lang.AbstractStringBuilder.toString(AbstractStringBuilder.java:642)
11-07 19:54:41.283: E/AndroidRuntime(10620):    at java.lang.StringBuilder.toString(StringBuilder.java:663)
11-07 19:54:41.283: E/AndroidRuntime(10620):    at org.kxml2.io.KXmlParser.readValue(KXmlParser.java:1419)
11-07 19:54:41.283: E/AndroidRuntime(10620):    at org.kxml2.io.KXmlParser.next(KXmlParser.java:390)
11-07 19:54:41.283: E/AndroidRuntime(10620):    at org.kxml2.io.KXmlParser.next(KXmlParser.java:310)
11-07 19:54:41.283: E/AndroidRuntime(10620):    at org.kxml2.io.KXmlParser.nextText(KXmlParser.java:2056)
11-07 19:54:41.283: E/AndroidRuntime(10620):    at org.ksoap2.serialization.DM.readInstance(DM.java:34)
11-07 19:54:41.283: E/AndroidRuntime(10620):    at org.ksoap2.serialization.SoapSerializationEnvelope.readInstance(SoapSerializationEnvelope.java:462)
11-07 19:54:41.283: E/AndroidRuntime(10620):    at org.ksoap2.serialization.SoapSerializationEnvelope.read(SoapSerializationEnvelope.java:420)
11-07 19:54:41.283: E/AndroidRuntime(10620):    at org.ksoap2.serialization.SoapSerializationEnvelope.readUnknown(SoapSerializationEnvelope.java:289)
11-07 19:54:41.283: E/AndroidRuntime(10620):    at org.ksoap2.serialization.SoapSerializationEnvelope.read(SoapSerializationEnvelope.java:422)
11-07 19:54:41.283: E/AndroidRuntime(10620):    at org.ksoap2.serialization.SoapSerializationEnvelope.parseBody(SoapSerializationEnvelope.java:149)
11-07 19:54:41.283: E/AndroidRuntime(10620):    at org.ksoap2.SoapEnvelope.parse(SoapEnvelope.java:137)
11-07 19:54:41.283: E/AndroidRuntime(10620):    at org.ksoap2.transport.Transport.parseResponse(Transport.java:100)
11-07 19:54:41.283: E/AndroidRuntime(10620):    at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:195)
11-07 19:54:41.283: E/AndroidRuntime(10620):    at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:95)
11-07 19:54:41.283: E/AndroidRuntime(10620):    at jp.osaka.APPLIActivity.getMarterDB(APPLIActivity.java:408)
11-07 19:54:41.283: E/AndroidRuntime(10620):    at jp.osaka.APPLIActivity.access$0(APPLIActivity.java:390)
11-07 19:54:41.283: E/AndroidRuntime(10620):    at jp.osaka.APPLIActivity$myrunable.run(APPLIActivity.java:369)
11-07 19:54:41.283: E/AndroidRuntime(10620):    at java.lang.Thread.run(Thread.java:856)

My data is about 2.4MB.(5.000.000 characters). Is there a limit on the memory of my device? Why?

Andrey Ermakov
  • 3,298
  • 1
  • 25
  • 46
mum
  • 1,637
  • 11
  • 34
  • 58

1 Answers1

1

The memory limit is for the app as a whole, not for the http alone. So you have a lot of memory used elsewhere in the app, or your phone as a whole is low on ram. Most likely its your app though. Run hprof on your app and see if you're leaking references. Believe it or not memory management in a large Java program takes as much effort as in C++, and Android's framework makes it easy to leak a lot of objects passed to it like activities.

Gabe Sechan
  • 90,003
  • 9
  • 87
  • 127
  • If i install some App on my Device, Is the memory limit smaller? – mum Nov 15 '12 at 07:48
  • No. The limit is a per app limit. Exactly what the limit is differs between devices. Remember that things like images in your app also take memory (large chunks of it), so clean those up too. – Gabe Sechan Nov 15 '12 at 15:02
  • Can i setting the memory limit of my app? – mum Nov 16 '12 at 02:45
  • There is a way to increase it slightly- add android:largeHeap="true" to the manifest. But that will only increase it slightly. The exact limit is set by the OEM, other than a custom ROM there's no way to set it. You're best off looking for leaks. – Gabe Sechan Nov 16 '12 at 03:50