Descarga rápidamente mapas de bits de la memoria

Estoy creando este juego para Android en Java. Tengo muchas imágenes, pero no necesito usarlas todas a la vez, así que he creado una clase Resource Manger que se ocupa de los Bitmaps que están en uso. Sin embargo, he encontrado bastante lento para borrar el mapa de bits de la memoria. Actualmente estoy haciendo algo como esto:

bitmap.recycle() bitmap = null System.gc (also tried Runtime.getRuntime().gc()) 

En primer lugar, ¿hay alguna manera de descargar más rápido los mapas de bits de la memoria o es posible comprobar de alguna manera si en realidad se han borrado para que pueda hacer la pantalla de carga dependen de que también?

No hay ninguna garantía de que el recolector de basura realmente se ejecutará cuando intentamos System.gc () como gc () espera ciertas condiciones previas como el hambre de recursos. Por lo tanto, es bastante obvio que llamar a gc () está desperdiciando ciclos críticos de CPU. Como desarrollador podemos hacer objetos innecesarios para gc coleccionables anulando las referencias.

Hay un par de técnicas de optimización que pueden ser útiles al crear un sistema de juego (juego).

  1. Utilice Textura. He aquí un ejemplo .

  2. Utilizar Sprite y SpriteSheets (da menos sobrecarga al sistema que cargar mapas de bits individuales). Muchos motores de juegos de código abierto están ahí que utiliza this.If que no desea utilizarlos obtener una idea de cómo crear desde cero de estas fuentes.

  3. Utilice estos documentos android estándar para cómo cargar mapas de bits de gran tamaño de manera eficiente y caché de mapas de bits para un mejor uso de mapa de bits. La idea es cuando el dispositivo de los usuarios no es lo suficientemente eficiente para manejar la cantidad de procesamiento y / o la memoria es menor para su juego siempre se puede reducir el mapa de bits (compromiso con la calidad para una mejor respuesta).

  4. Pruebe siempre su aplicación contra problemas de pérdida de memoria. Este es un buen post que te ayudará.

  5. Mantenga InMemory (no suelte una vez utilizado) los elementos que se utilizan varias veces dentro del juego en la misma escena. La razón es que se necesita mucho tiempo para cargar imágenes en la memoria.

Espero que esto te ayudará.

Como dijo SylvainL, System.gc y sus amigos recogen la basura completa y pueden ser bastante lentos. La máquina Java ejecuta el GC periódicamente, y el período es finetuned dependiendo de cuánta memoria libre está disponible en un momento dado.

La mejor opción para mí es utilizar algún tipo de agrupación de mapas de bits: tener un conjunto de instancias de mapa de bits prefabricadas que puede adquirir y liberar en el grupo y administrar instancias de búfer en una caché que aplica políticas LRU.

Con el ajuste adecuado, puede obtener coste cero en la creación y destrucción de instancias de mapa de bits a medida que se agrupan, y las instancias de búfer que contienen datos de mapa de bits se cargarán dinámicamente y se descargarán de la memoria en función del uso.

  • Cargar muchas imágenes de mapa de bits grandes como miniaturas - Android
  • Vista personalizada que convierte a mapa de bits que devuelve imagen negra
  • Osmdroid: ¿Cómo puedo crear y cargar un mapa de mis propios mapas de bits (mosaicos)?
  • Crear mapa de bits desde el área de pantalla especificada
  • Utilizar Picasso para obtener una devolución de llamada con un mapa de bits
  • Rendimiento de mapa de bits escala android
  • Cómo obtener un objeto Uri desde Bitmap
  • Cómo dibujar un círculo después de zoom en android
  • ¿Hay una manera de cargar y dibujar parcialmente un mapa de bits de archivo en Android?
  • Cómo configurar el mapa de bits para el ImageView en main.xml capturado desde la cámara?
  • ALPHA_8 bitmaps y getPixel
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.