Я схожу с ума по этому вопросу:
Я получаю OutOfMemoryError каждый раз, когда открываю свое приложение. В какой-то момент он загружает изображение с сервера, но оно закодировано строкой Base64.
Что я делаю в основном:
decodedString = Base64.decode(imagen_codificada);
Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0,
decodedString.length);
Но я каждый раз получаю проклятый OOME.
Если попробовать с этим:
BitmapFactory.Options options=new BitmapFactory.Options();
options.inSampleSize = 8;
Даже установка опций на 128, что безумие, но все равно вылетает...
Есть ли способ уменьшить размер строки, кодирующей изображение, перед его декодированием? Я не могу напрямую работать с изображением, потому что оно используется для многих других целей в приложении и в окружении рабочего стола...
Прикрепляю лог ОШИБКИ:
12-21 10:36:27.032: E/dalvikvm-heap(5508): 10119168-байтовое внешнее выделение слишком велико для этого процесса. 12-21 10:36:27.032: E/dalvikvm(5508): Недостаточно памяти: размер кучи = 5823 КБ, выделено = 4351 КБ, размер растрового изображения = 720 КБ, предел = 13692 КБ 12-21 10:36:27.032: E/dalvikvm( 5508): информация об обрезке: размер = 6343 КБ, разрешенный размер = 6343 КБ, усечено = 520 КБ 12–21 10:36:27.032: E/GraphicsJNI (5508): виртуальная машина не позволяет нам выделить 10119168 байт 12–21 10:36: 27.192: E/AndroidRuntime(5508): НЕИСПРАВНОЕ ИСКЛЮЧЕНИЕ: main 12-21 10:36:27.192: E/AndroidRuntime(5508): java.lang.OutOfMemoryError: размер растрового изображения превышает бюджет виртуальной машины
РЕДАКТИРОВАТЬ: РЕШЕНО С ЭТИМ:
decodedString = Base64.decode(imagen_codificada);
System.gc();
BitmapFactory.Options options=new BitmapFactory.Options();
options.inSampleSize = 8;
InputStream input = new ByteArrayInputStream(decodedString);
Bitmap decodedByte = BitmapFactory.decodeStream(input, null,
options);
menu.setNombreApellido(decodedByte);
Спасибо всем!!