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?
- Cómo dibujar un círculo después de zoom en android
- Cómo ver realmente un mapa de bits tomado de un volcado de montón de Android
- OutOfMemoryError mientras decodifica y codifica Base64 String en Bitmap
- Cómo pasar el mapa de bits de una actividad a otra
- Dibujar objeto / imagen sobre lienzo
- Convertir la imagen de recursos desplegables en mapa de bits
- Cómo convertir un LinearLayout en imagen?
- Define el recuento de bytes de mapa de bits y establece el límite en el búfer de mapa de bits
- ¿Cómo puedo pasar un objeto Bitmap de una actividad a otra?
- Cómo girar la imagen de "onPictureTaken" sin Excepción de memoria insuficiente?
- Android usando Renderscript para efectos de desenfoque falla causas A / libc: Fatal señal 7 (SIGBUS), código 2, error addr 0x9e6fa000 en tid 482 (AsyncTask # 1)
- Obtener mapa de bits de zoom visible android imagen
- Es el tamaño decreciente de los archivos .png tiene algún efecto a resultado Bitmap en la memoria
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"?