En mis usuarios de la aplicación elegir las imágenes y el programa permite a los usuarios realizar cambios en las imágenes. Como hay muchos dispositivos Android diferentes, mi programa falla en algunos dispositivos que tienen menos tamaño de almacenamiento dinámico. Quiero calcular las dimensiones de mejor ajuste para el teléfono del usuario para que no se bloquee debido al presupuesto de VM. He agregado una captura de pantalla de "Picsay Pro" que está haciendo exactamente lo que estoy buscando. Yo sé de los "BitmapFactory.Options" mi único problema es encontrar una manera de decidir dimensiones de imagen que no dejan que bloquee la aplicación del presupuesto porque VM.¿Cómo elegir el tamaño de imagen óptimo para no exceder el presupuesto de VM?
Respuesta
calcular el espacio libre que queda en el teléfono:
long freeMemory = (Runtime.getRuntime().maxMemory()) - (Debug.getNativeHeapAllocatedSize());
donde,
Runtime.getRuntime() .maxMemory() - Devuelve el tamaño límite Montón total (en bytes).
Debug.getNativeHeapAllocatedSize() - devuelve la cantidad de datos que ya ha utilizado su aplicación (en Bytes).
Calcular el tamaño del mapa de bits que está utilizando esta fórmula,
long Bytes_allocated = (height of the Image) * (width of the Image) * 4;
freeMemory
Compare y Bytes_allocated
para seleccionar el tamaño apropiado para su aplicación.
verdad es que acabé la compresión de imágenes en el teléfono por dos razones. Una era la velocidad de carga y otra era problemas de pila. ¡Puedes intentar hacer algo similar, o al menos publicar el seguimiento de la pila!
Android outofmemory error bitmap size exceeds vm budget in 2.3.3
Creo que esta técnica podría ayudar a la compresión
Hasta ahora no he encontrado ninguna manera confiable para hacer frente a tamaño de la imagen frente a la memoria disponible. El problema es que la memoria se fragmenta rápidamente, por lo que podría tener 10 MB libres, pero no espacio contiguo para una imagen de 2 MB. Lo que realmente se necesita es el tamaño del espacio libre más grande, pero no parece haber ninguna forma de conseguirlo. Mejor sería una forma de desfragmentar la memoria, pero tampoco existe esa función para esto.
Aún si la memoria disponible es inferior a la de la imagen, puede estar seguro de que se va a bloquear si intenta usarla, por lo que tiene algún mérito que al menos verificar antes de usarla.
Con las tabletas finales de 2012 teniendo ahora 1920x1280 de resolución, ahora tenemos 20 MB de memoria continua en una sola imagen de fondo para! Parece que algunas de estas tabletas ahora permiten montones de hasta 256MB, pero mientras tiramos más espacio de VM aparentemente lo resuelve, realmente necesitamos un desfragmentador de memoria o una forma de reservar espacio.
hay un truco que podría ayudar si el tamaño de la imagen no se escala o se modifica, y cada imagen modificada es del mismo tamaño y están limitando su aplicación a Android 3.0+:
Options opt2 = new BitmapFactory.Options();
opt2.inBitmap = mBitmap; // reuse mBitmap to reduce out of memory errors
mBitmap = BitmapFactory.decodeResource(getResources(), myDrawable, opt2);
Esto reutilizará la misma área de memoria mBitmap para la imagen.
- 1. OutofMemoryError: el tamaño del mapa de bits excede el presupuesto de la VM (Android)
- 2. java.lang.OutOfMemoryError: el tamaño del mapa de bits excede el presupuesto de la VM
- 3. Causado por: java.lang.OutOfMemoryError: el tamaño del mapa de bits excede el presupuesto de la VM
- 4. el tamaño del mapa de bits excede el error de presupuesto de Vm android
- 5. Cómo reparar el error de tamaño de mapa de bits excede VM presupuesto
- 6. El tamaño del mapa de bits excede el presupuesto de la VM cuando se desarrolla el juego
- 7. OutOfMemoryError: tamaño de mapa de bits supera el presupuesto VM: - Android
- 8. Android: OutofMemoryError: el tamaño del mapa de bits excede el presupuesto de VM sin ningún motivo. Puedo ver
- 9. cómo elegir el tamaño del montón JVM?
- 10. sigma óptimo para el filtrado gaussiano de una imagen?
- 11. ¿Cuál es el tamaño óptimo para una aplicación de Android?
- 12. Cómo determinar el tamaño óptimo de la pila de hilos?
- 13. dd: ¿Cómo calcular el tamaño de bloques óptimo?
- 14. Cómo calcular el tamaño de porción óptimo para cargar archivos de gran tamaño
- 15. Buscando el tamaño óptimo para BufferedInputStream en Java
- 16. Error de outofmemory de Android excede el presupuesto de vm en 2.3.3
- 17. Android: Excepción de falta de memoria/¿Cómo se agrega decodeResource al presupuesto de VM?
- 18. Servidor SQL: el tamaño total de un índice o clave principal no puede exceder 900 bytes
- 19. Cómo cambiar el tamaño de imagen UIBarButtonItem
- 20. Tamaño óptimo para particiones de bases de datos
- 21. uso óptimo de BitmapFactory.Options.inSampleSize para la velocidad
- 22. Cuando uso nhibernate, ¿cómo puedo averiguar el tamaño óptimo del lote en el código de mapeo?
- 23. Tamaño de montón mínimo de manifiesto de Android VM
- 24. C# FileStream: Tamaño de búfer óptimo para escribir archivos grandes?
- 25. ¿Cuál es el algoritmo para determinar el tamaño del grupo de trabajo óptimo y el número de grupo de trabajo
- 26. Tamaño óptimo de las imágenes de fondo en mosaico CSS
- 27. ¿cómo puedo ver cuánta memoria está usando mi aplicación sin su presupuesto de VM?
- 28. ¿Puede ImageMagick devolver el tamaño de imagen?
- 29. ¿Cómo cambiar el tamaño de la imagen original en un tamaño de imagen común en Java?
- 30. ¿Cómo se analizan los archivos grandes en Groovy sin exceder el tamaño del montón?