Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


¿Cómo elegir el tamaño de imagen óptimo para no exceder el presupuesto de VM?

En mi aplicación, los usuarios eligen imágenes y el programa permite a los usuarios realizar cambios en las imágenes. Dado que hay un montón de diferentes dispositivos de Android por ahí mi programa se bloquea en algunos de los dispositivos que menos tamaño de montón. Quiero calcular las dimensiones más adecuadas para el teléfono del usuario para que no se bloquee debido al presupuesto de VM. He añadido una captura de pantalla de "Picsay Pro", que está haciendo exactamente lo que estoy buscando. Sé que sobre el "BitmapFactory.Options" mi único problema es encontrar una manera de decidir las dimensiones de la imagen que no dejarán la aplicación caer debido a presupuesto de la VM.

Introduzca aquí la descripción de la imagen

  • Error de memoria insuficiente al utilizar la API de Google Maps
  • ¿Cómo entender que muestra LeakCanary?
  • Fugas de contexto de Android en AsyncTask
  • Android Context Memory Leak ListView debido a AudioManager
  • Android - es onDestroy supone destruir la actividad, sus variables y liberar memoria
  • Atascado en "Vaciar memoria, la aplicación se congelará. Brrr. "Mensaje
  • Tipos de memoria de Android (RAM v Memoria interna)
  • Cómo utilizar Leak Canary
  • 4 Solutions collect form web for “¿Cómo elegir el tamaño de imagen óptimo para no exceder el presupuesto de VM?”

    Calcular el espacio libre restante en el teléfono:

    long freeMemory = (Runtime.getRuntime().maxMemory()) - (Debug.getNativeHeapAllocatedSize());

    dónde,

    Runtime.getRuntime (). MaxMemory () – devuelve el tamaño del límite de montón total (en bytes).

    Debug.getNativeHeapAllocatedSize () : devuelve la cantidad de datos que ya utiliza su aplicación (en bytes).

    Calcular el tamaño del mapa de bits que está utilizando por esta fórmula,

    long Bytes_allocated = (height of the Image) * (width of the Image) * 4;

    Compare freeMemory y Bytes_allocated para seleccionar el tamaño Bytes_allocated para su aplicación.

    En realidad terminé comprimiendo imágenes en el teléfono por dos razones. Uno era velocidades de carga y otro era problemas de montón. Usted puede intentar hacer algo similar, o al menos publicar el seguimiento de la pila!

    El tamaño del mapa de bits de errores de outofmemory de Android excede el presupuesto de vm en 2.3.3

    Creo que esta técnica de compresión podría ayudar

    Hasta ahora no he encontrado ninguna forma fiable de tratar con el tamaño de la imagen frente a la memoria disponible. El problema es que la memoria se fragmenta muy rápidamente, por lo que podría tener 10 MB libre, 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 obtener esto. Mejor sería una forma de desfragmentar la memoria, pero tampoco existe tal función para esto.

    Sin embargo, si su memoria disponible es menor que la de la imagen, puede estar seguro de que va a bloquearse si intenta utilizarlo, por lo que tiene algún mérito por lo menos comprobar antes de usarlo.

    ¡Con las tabletas de finales de 2012 que ahora tienen una resolución de 1920×1280, ahora necesitamos 20MB de memoria continua para una sola imagen de fondo! Parece que algunas de estas tabletas ahora están permitiendo montones de hasta 256MB, pero al lanzar más espacio de VM aparentemente lo resuelve, realmente necesitamos un desfragmentador de memoria o una forma de reservar espacio.

    Hay un truco que puede ayudar si el tamaño de la imagen no se escala o modifica, y cada imagen cambiada es del mismo tamaño y está limitando su aplicación a Android 3.0 o superior:

     Options opt2 = new BitmapFactory.Options(); opt2.inBitmap = mBitmap; // reuse mBitmap to reduce out of memory errors mBitmap = BitmapFactory.decodeResource(getResources(), myDrawable, opt2); 

    Esto reutilizará el mismo área de memoria mBitmap para la imagen.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.