2010-05-23 16 views
14

Estoy buscando escribir un juego para Android, difícil no tengo un dispositivo Android. Para aquellos de ustedes que poseen un dispositivo, ¿cómo se relaciona el rendimiento en el emulador con el rendimiento real del dispositivo? Estoy especialmente interesado en tareas relacionadas con gráficos.¿Cómo se compara el rendimiento del emulador de Android con el rendimiento real del dispositivo?

Esto obviamente depende tanto de la máquina que ejecuta el emulador, y el dispositivo específico en cuestión, pero estoy hablando de números aproximados aquí.

Esta pregunta es duplicate, pero dado que la publicación está muy desactualizada, pensé que ahora es irrelevante.

Respuesta

13

En términos generales, el emulador es mucho más lento que un dispositivo en tareas de CPU y GPU. Eso es por lo menos dos razones:

  1. El emulador se ejecuta códigos de operación de ARM, convirtiéndolas en las instrucciones x86 equivalentes, que es lento
  2. dispositivos (por lo general) tienen aceleradores gráficos, mientras que el entorno emulado no es así, a pesar de cualquier tarjeta de video que tiene en la máquina que ejecuta el emulador

Para poner las cosas en perspectiva, hago mi trabajo con Android en un Intel quad-core 2.66GHz con una tarjeta gráfica bastante agradable. Para los videos que funcionan bien en los dispositivos, puedo a veces hacer que se reproduzcan en el emulador.

Sin embargo, el emulador es más rápido que un dispositivo en E/S "en disco". Cuando escribe para "destellar" en el emulador, está escribiendo en un archivo de imagen de disco que probablemente reside en un disco duro normal, suponiendo que no esté usando un SSD. En realidad, escribir para flashear en un dispositivo puede ser mucho más lento: Brad Fitzpatrick, en la conferencia Google I | O 2010 de la semana pasada, citó picos de hasta 200ms para escribir un solo byte en flash. Y, la combinación de Android, flash y el sistema de archivos yaffs2 aparentemente hace que un dispositivo se vuelva progresivamente más lento en la E/S flash a medida que el flash se llena. Por lo tanto, su recomendación era hacer cualquier flash escribe en un hilo de fondo en lugar de la secuencia principal de la aplicación, donde puede atar la interfaz de usuario y conducir a una aplicación "janky".

(al parecer, "janky" es un término técnico ... :-)

Por cierto, cuando se muestra en línea, sin duda ver la presentación de Brad en YouTube. A veces puede ser un poco difícil de seguir, porque habló muy rápido, pero estaba lleno de datos útiles relacionados con el rendimiento.

+0

Gracias, eso es información útil. En el mismo tema, ¿usa el emulador la misma máquina virtual que un dispositivo? En particular, ¿debería esperar una actividad similar de GC? – uj2

+0

Si con "VM" te refieres a Dalvik VM para ejecutar aplicaciones escritas en Java, entonces sí. En términos de actividad GC, la única fuente de diferencia de potencial está en el tamaño máximo del montón de la aplicación. Los dispositivos más antiguos, y creo que el emulador, te limitan a un montón de 16 MB. Los dispositivos más nuevos con más RAM y pantallas más grandes admiten un montón de 24 MB. No está claro si hay una forma de controlar el tamaño del montón de la aplicación en el emulador. Es probable que desee hacer sus pruebas en el tamaño de montón más pequeño, de todos modos. – CommonsWare

+0

He tenido problemas de tiempo de ejecución con el código en el emulador, una tabactivity tardó 8-10 segundos en cargarse en el emulador, en el dispositivo real tomó 1-2 segundos, retraso apenas visible. – Pentium10

1

La conversión de códigos de operación ARM a x86 como se mencionó es la principal fuente de retraso en el emulador.

En mi experiencia, el emulador es muy lento y es muy poco representativo de lo que se puede esperar de un dispositivo, especialmente un procesador Snapdragon.

Incluso las aplicaciones extremadamente básicas en el emulador (estoy hablando de LinearLayout con un par de TextViews) tardan un poco en cargar y ejecutar la actividad.

En su mayoría, sin embargo, el retraso parece ser inicial. Con eso, quiero decir que si desplazas una lista en el emulador, tomará un segundo reconocer la acción y ser un poco brusco al principio, pero luego se suaviza.

En resumen, no recomendaría desarrollar un juego con el uso del emulador para nada más que la programación inicial, la depuración y quizás ver cómo se organizan las actividades.No tendrás idea de jugabilidad sin un dispositivo real.



P.S. No te olvides de probar tu juego en varias versiones de Android y busca los juegos de problemas comunes en varias versiones de Android.

+0

Me gustaría que compilaran el emulador para x86 como lo hizo Palm con su emulador webOS, a pesar de que sus teléfonos usan una versión de webOS compilada para procesadores ARM. ¿No se puede hacer esto fácilmente con Android también? – Vitaly

2

Compruebe esta agradable article donde se muestra cómo se puede comparar la velocidad de la CPU del emulador con la velocidad de la CPU del dispositivo que usa BogoMIPS.

Cuestiones relacionadas