Han pasado más de dos semanas y 18000 kilómetros desde mi última aportación a esta casa de locos, pero como os echaba de menos (aunque sé que no es recíproco, vosotros estabais más a gusto sin mí…) tarde o temprano tendría que volver a escribiros algo. Y como El Androide Libre me quiere más de lo que pueda parecer, me ha propuesto un tema curioso y divertido, que espero poder desgranar un poco, resolver alguna duda y compartir opiniones con vosotros: ¿es JAVA malo para Android? ¿quizá un mal necesario? Espero que os resulte instructivo a los que no sabéis, voy a intentar explicarme de la forma menos técnica posible para facilitar la comprensión a todo el mundo.
DALVIK, una máquina virtual muy especial
Antes de empezar con el tema es muy importante entender la relación de JAVA con Android, para poder evaluarlo todo en un contexto adecuado.
En realidad JAVA en sí mismo tiene poco que ver con Android, aunque algo hay. El funcionamiento de las aplicaciones en Android, de cualquier tipo (fuera del propio sistema operativo), hace que estas corran sobre una máquina virtual llamada DALVIK. Esta máquina es la responsable de que no sea necesario diseñar las aplicaciones específicamente para cada teléfono (aunque haya que prestar algo de atención a elementos como la pantalla para que todo funcione un poco mejor), sino que solamente haya que diseñarlos para Android, y que sea ella quien se encargue de decirle a nuestro sistema qué dispositivos deben ser utilizados en cada momento.
Esta máquina, aunque es compatible con JAVA, no es esa misma plataforma estrictamente hablando, pero a la hora de desarrollar, es prácticamente lo mismo para muchas cosas e incluso existen múltiples herramientas para hacer conversiones de JAVA a Android.
¿Para qué es necesaria la máquina virtual?
Pues esa es la principal diferencia entre Android y otras plataformas y además la principal razón de que esté tan extendido.
La máquina virtual es un intermediario entre las aplicaciones y el sistema. Cuando aparece una nueva plataforma hardware, simplemente hay que adaptar DALVIK para que funcione en ella y automáticamente las aplicaciones que existían con anterioridad empiezan a funcionar en ella también. Es decir, esta arquitectura es la diferencia entre tener que preparar aplicaciones para todas las plataformas de hardware que soporta Android y simplemente desarrollar para Android. Es lo que permite que sea una plataforma altamente compatible y que se pueda aprender con rapidez, permitiendo además que las aplicaciones lleguen a una gran cantidad y variedad de dispositivos.
¿Y cual es el problema entonces?
Pues el problema es, como hemos mencionado en el anterior párrafo, que es un intermediario. Como en casi todo en esta vida, añadir intermediarios hace que las tareas que queremos resolver requieran de mayor cantidad de recursos para ello. En el caso de las máquinas virtuales (como JAVA o DALVIK), estas plataformas necesitan recursos hardware de nuestro sistema para funcionar, así como más recursos hardware para poder ejecutar las aplicaciones. Sin embargo, las soluciones nativas (como por ejemplo las de iOS) solamente requieren los recursos del propio sistema, permitiendo con ello que obtengamos unos resultados igual de buenos con un hardware menos potente, o mejores resultados con el mismo.
Si bien es cierto que las máquinas virtuales restan eficiencia a la resolución final de cada tarea, tienen una admirable ventaja sobre las tecnologías nativas, pues permiten trabajar sobre muchas y variadas arquitecturas. Y quizá hace unos años habría podido plantearse un cambio de filosofía para un ecosistema como Android, pero actualmente, debido precisamente al éxito que está teniendo, no hay una alternativa. Además, las mejoras en el propio hardware unidas a los avances en la propia máquina virtual hacen que, si bien se sigue notando la MV, cada vez afecte menos a la experiencia de usuario, por lo que o cambian mucho las cosas, o tenemos DALVIK para años…