¡Noticias calientes! Bueno, realmente no es una noticia, ¡pero aun así está mas caliente que un vasito de leche 10 minutos en el microondas a plena potencia!
En estos momentos se está llevando a cabo una discusión de altísimo nivel entre Dianne Hackborn, Android Framework Engineer y Andrew Munn, ex Ingeniero de Android, que ahora ha fichado por Windows Phone.
Todo viene por un post interesantísimo de Diane, llamado “Android Graphics True Facts” (Alerta: ¡En inglés y con conceptos muy técnicos!), en el que viene a decir que ciertas partes de la interfaz llevan aceleradas por hardware desde el principio (puedes verlo en las transiciones entre aplicaciones y en como se dibujan los menús en la pantalla por ejemplo). Aunque la aceleración por hardware se ha activado por completo en Ice Cream Sandwich y parcialmente en Honeycomb, no es la “panacea”. Muchas veces en ingeniería informática no existe una “solución perfecta”, y tienes que decidirte por un diseño que tiene sus pros y sus contras.
En este sentido Diane nos comenta que activar los drivers de la GPU (Tarjeta gráfica de nuestros terminales) consume 8MB por aplicación en los que se utiliza. Piensa en 8MB extra para el proceso del teléfono, otros 8 para el launcher, otros 8 para… ¿Decidir entre espacio en memoria o suavidad de los gráficos? ¡Difícil elección! También que la GPU puede hacer ciertos trabajos mas eficientemente que la CPU, pero otros muchos por ejemplo no o no ofrecen ninguna ventaja. Piensa en esa preciosa status bar de arriba de tu pantalla. ¿Para que vas a gastar recursos en tenerla acelerada por hardware si por software va bastante bien?
Por último no tenemos que olvidar que conseguir 60fps para una interfaz requiere de una potente GPU. Tomemos por ejemplo el SGS2 frente al Galaxy Nexus. Ambos son dos bestias, pero no olvidemos que mientras que el Galaxy S2 tiene una resolución de 800×480, el Nexus mueve 1280×720. Eso implica que el Galaxy S2 tiene que mover 537.000 píxeles menos. Para alcanzar el rendimiento del SGS2 se necesitaría una GPU 2.4 veces mas potente. Obviamente esto se mitiga con ciertos trucos software y por eso el Nexus va fluidisimo sin tener una GPU tan potente.
Andrew Munn, fan de Android trabajando para la competencia, quiere llegar un poco mas allá. Él incide que el problema que tiene Android con la supuesta fluidez viene por el modo en el que se gestiona la UI: En tu móvil o en tu ordenador, un procesador solo puede hacer una cosa al mismo tiempo. Cuantos mas cores tiene mas cosas puedes hacer a la vez. Cada tarea se llama “hilo” y el procesador es capaz de cambiar de trabajo muy rápidamente, tanto que ni te das cuenta. El tiempo que se dedica a cada hilo viene dado por su prioridad.
Según Andrew, el problema es que el hilo que se encarga de la UI no tiene una prioridad especial en Android, mientras que en iOS, por ejemplo, se tiende a priorizarlo. Resultado, Android pierde; iOS gana. Este comportamiento viene debido a ciertas decisiones de diseño que se hicieron al principio de la vida de Android.
¿Por qué no se le cambia el diseño a Android, preguntaréis?
Esto es debido a que cambiar el sistema, aunque puede parecer sencillo, provocaría un efecto cascada muy negativo:
- Las aplicaciones tendrían que reescribirse para que funcionaran con el nuevo sistema.
- Habría que escribir un modo “legado” para las aplicaciones antiguas y las nuevas.
- El desarrollo de Android debería detenerse hasta que se terminase el nuevo sistema gráfico
Y no parecen efectos muy positivos para nuestro ecosistema, ¿verdad?
Recientemente Chi-Ho Kwok, de la Universidad de Delft, ha añadido mas leña al fuego, argumentando que el problema no viene por el sistema, si no por la “cultura”. Cultura de Apps mal programadas. Él, como Android Developer prefiere tener control sobre los hilos de sus aplicaciones, y que tener un hilo dedicado a la UI que bloquea el resto del sistema, no es la solución mas deseable. Defiende que es perfectamente capaz de utilizar vistas con mas de 200 elementos y alcanzar 60fps en un hardware antiguo.
Según insinúa Chi-Ho, con toda la política y guías de programación que fuerza Apple en su ecosistema, los desarrolladores suelen publicar aplicaciones cuando éstas alcanzan una UI suave y correcta para los estándares, mientras que con el campo abierto de Android los programadores suben mas aplicaciones menos eficientes.
Los platos están servidos señores, y hay para todos los gustos. En mi opinión, y sin haber sido ingeniero de Android, es posible que la solución pase por una mezcla de las tres. Puede que el sistema gráfico de Android sea mejorable, y seguro que seguirá mejorando. Quizá se podría sacrificar un poco mas de procesamiento para la interfaz. Y es posible que buenos developers nos enseñen que no es necesario artificios para conseguir una interfaz suave. Sea lo que sea, necesitaremos a los tres. En cualquier caso, para mí es suficientemente fluida en 3.0. ¡No os perdáis los nuevos posts de nuestro editor jefe con la review del Galaxy Nexus para ver cuanto mejora en Ice Cream Sandwich!
Si esto es cierto, me entran ganas de llorar porque amo a android, pero como digo: si el asunto de la prioridad en los procesadores es verdad, android nacio con su sentencia de muerte ya firmada :'(
¿Por que? Diariamente Android vende mas de 550.000 terminales y ya hay mas de 200 millones y lo único que puede hacer es mejorar 🙂
Desconfía de los sistemas que lo único que pueden hacer por ti es ir a 60fps 😉