Fuera de memoria en una asignación de bytes (Bitmap como String al servicio web con jabón)
Estoy teniendo un bitmap
, así que quiero subir una cadena de webserivceas y quiero recuperar la cadena.
Para convertir bitmap a string am usando:
- ALPHA_8 bitmaps y getPixel
- Cómo establecer el tamaño del mapa de bits en ZXing?
- Android: mapa de bits de una vista de gran tamaño
- Manejo de mapas de bits grandes en Editor de imágenes
- Imagen de mapa de bits de ahorro de Android temporalmente
ByteArrayOutputStream stream = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream); byte[] byteArray = stream.toByteArray(); strBase64 = Base64.encodeToString(byteArray, Base64.URL_SAFE);
Esto arriba String
está usando como propiedad to en soapobject para cargar.
Pero me estoy quedando sin Out of memory on a 11674900-byte allocation
, mientras que la impresión y la carga.
Y si depuré el problema, sin imprimir estoy recibiendo
com.sun.jdi.InvocationException occurred invoking method.
En soaprequest.
¿Cómo resolver este problema y upload image
en webservice como cadena?
- Android - OutOfMemory mientras decodifica Bitmap de recursos en Android 5.0
- Android: ancho máximo permitido y altura del mapa de bits
- Android Carga de mapa de bits de error de memoria Galaxy S3 WXGA
- Cómo obtener bitmap (frames) de video usando MediaCodec
- Configurar mapa de bits como fondo de la vista de texto - Android
- WebView.draw () no funciona correctamente en la última versión de WebView de Android System
- Cómo cambiar el tamaño de la imagen en Android?
- ¿Por qué Android dibuja Vista dentro de otra (con anchura y altura definidas en píxeles) de manera incorrecta?
Estás creando 3 copias de una imagen de 11MB ( bitmap
, stream
, strBase64
). Así que reduzca el uso de la memoria llamando
bitmap.recycle();
Debajo de esta línea:
bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
También cierra la secuencia cuando termines con ella (debajo de stream.toByteArray();
):
stream.close(); stream = null;
Recuerde que no hay garantía de que la memoria se limpie inmediatamente después de estas llamadas . Manera apropiada de manejar este tipo de situación es transferir los pedazos grandes del archivo por el pedazo.
Una asignación de 11 millones de bytes mucho más grande que el montón de la mayoría de los teléfonos puede manejar. Usted definitivamente no quiere tener una matriz de bytes de ese tamaño en la memoria.
Intente usar el tamaño de insample con
BitmapFactory.decodeStream (InputStream es, Rect outPadding, BitmapFactory.Options opts)
Y las opciones de configuración para utilizar el tamaño de insample para devolver una imagen de tamaño razonable.
Una solución sencilla para algunos podría ser añadir android: configChanges = "orientation | screenSize" a su manifiesto. En mi caso, el emulador de Nexus_S se estaba estrellando sin esta línea, mientras que el dispositivo real de Nexus 7 en el que estaba probando no se estaba estrellando en la rotación.
Añadir esto parece ser una solución fácil para las aplicaciones que tienen un par de mapas de bits "match_parent" grandes para rotar y cambiar el tamaño.
¡Cuidado si está construyendo API antes de las 13!
- Refactor> Mover superpone la ubicación de otro proyecto
- Permitir que el usuario que utiliza el navegador móvil para enviar el código de producto que quieren por SMS