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:
- El emulador se ejecuta códigos de operación de ARM, convirtiéndolas en las instrucciones x86 equivalentes, que es lento
- 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.
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
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
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