Просто обновление, я обнаружил, что у метода "call" в AndroidHttpTransport не хватает памяти в этой строке -
if (debug) {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] buf = new byte[256];
while (true) {
int rd = is.read(buf, 0, 256);
if (rd == -1)
break;
bos.write(buf, 0, rd);
}
bos.flush();
buf = bos.toByteArray(); //Goes out of memory here
responseDump = new String(buf);
is.close();
is = new ByteArrayInputStream(buf);
вызов toByteArray занимает много памяти, поэтому для преодоления этого,вместо преобразования ответа в байтовый массив я теперь напрямую записываю его в файл XML, и он сохраняется в любом месте по моему выбору.Здесь -
if (debug) {
FileOutputStream bos = new FileOutputStream("/data/data/com.mypackage.myapp/response.xml");
byte[] buf = new byte[1048576];
int current = 0; int i=0; int newCurrent = 0;
while ((current = inputStream.read(buf)) != -1) {
newCurrent = newCurrent + current;
Log.d("current", "Current = " + current + " total = "+newCurrent+" i = "+i++);
bos.write(buf, 0, current);
}
bos.flush();
}
Устройству больше не хватает памяти, и у меня есть собственный метод синтаксического анализа, который берет этот XML и записывает его в БД.