Недостаточно памяти при распределении байтов (битмап как строка для веб-сервиса с использованием мыла)

У меня есть bitmap , поэтому я хочу загрузить строку webserivceas и хочу извлечь строку.

Для преобразования bitmap в строку am с использованием:

 ByteArrayOutputStream stream = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream); byte[] byteArray = stream.toByteArray(); strBase64 = Base64.encodeToString(byteArray, Base64.URL_SAFE); 

Это выше String использует как свойство для soapobject для загрузки.

Но я получаю Out of memory on a 11674900-byte allocation , а при печати и выгрузке.

И если я отлаживаю проблему, без печати

 com.sun.jdi.InvocationException occurred invoking method. 

На soaprequest.

Как решить эту проблему и upload image в webservice как строку?

Solutions Collecting From Web of "Недостаточно памяти при распределении байтов (битмап как строка для веб-сервиса с использованием мыла)"

Вы создаете 3 копии 11 МБ изображения (битмап, stream , strBase64 ). Поэтому уменьшите использование памяти, вызвав

 bitmap.recycle(); 

Ниже этой строки:

 bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream); 

Также закройте поток, когда вы закончите с ним (ниже stream.toByteArray(); ):

 stream.close(); stream = null; 

Помните, что нет гарантии, что память будет очищена сразу после этих вызовов . Правильный способ справиться с этим типом ситуации – передать большой кусок файлов куском.

Распределение в 11 миллионов байт намного больше, чем может обрабатывать куча большинства телефонов. Вы определенно не хотите содержать массив байтов такого размера в памяти.

Попытайтесь использовать малый размер с помощью

BitmapFactory.decodeStream (InputStream is, Rect outPadding, BitmapFactory.Options выбирает)

И параметры настроек, чтобы использовать неровный размер, чтобы вернуть изображение с достаточно большим размером.

Простым решением для некоторых может быть добавить android: configChanges = "orientation | screenSize" в ваш манифест. В моем случае эмулятор Nexus_S рушился без этой строки, в то время как фактическое устройство Nexus 7, которое я тестировал, не рушилось при вращении.

Добавление этого параметра является легким решением для приложений, у которых есть несколько больших растровых изображений match_parent для поворота и изменения размера.

Осторожно, если вы создаете API до 13!