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?
- ¿Necesita hacer un cierre adicional en un FileOutputStream al utilizar Bitmap.compress ()?
- ¿Cómo cargar imágenes grandes en Android y evitar el error de memoria?
- ¿Reutiliza Android las imágenes cargadas desde el recurso?
- La mayoría de la forma eficiente de memoria para cambiar el tamaño de mapas de bits en Android?
- Android cómo configurar la opacidad en bitmap xml
- ¿Podría alguien por favor explicar la matriz (Mr.Anderson)?
- ¿Cómo puedo rotar un mapa de bits en Android?
- PackageManager.getApplicationIcon () devolver el icono predeterminado?
- Crear mapa de bits de la matriz de bytes, que se descomprime desde un archivo JPEG a través de libjpeg
- Sólo Android 4.1, Bitmap se recicla automáticamente
- OutOfMemory Error al intentar girar una imagen dentro de una vista de imagen
- Cómo cambiar el color de fondo negro de mapa de bits a transparente?
- Android Carga de mapa de bits de error de memoria Galaxy S3 WXGA
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).
-
Utilice Textura. He aquí un ejemplo .
-
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.
-
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).
-
Pruebe siempre su aplicación contra problemas de pérdida de memoria. Este es un buen post que te ayudará.
-
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.
- Diálogo de prueba en ActivityUnitTestCase de Android
- ¿Por qué obtenemos estas intenciones "inválidas"?