Desarrollar en Android va a ser diferente para mí, ya que pasé los últimos 10 años codificando juegos en C ++. ¿Cuáles son las principales diferencias / dificultades / cuellos de botella para el desarrollo de Android? Mi gran preocupación es mudarme a Java, ¿qué voy a extrañar más?
Para ser más claro: ¿qué extrañaría si codificara todo en Java en comparación con la forma en que normalmente codifico C ++ para consolas?
Respuestas:
Lo más importante que probablemente extrañaría sería la administración explícita de la memoria. En el lado positivo, Java tiene información de tipo de tiempo de ejecución y genéricos reales. Consulte también: http://developer.android.com/guide/practices/design/performance.html para obtener algunos consejos de Google sobre cómo mantener eficiente su código Java.
Raymond Chen recientemente se ha desahogado sobre la recolección de basura y la administración de memoria en el CLR y sus publicaciones en el blog son excelentes para comprender cómo funciona. (Sé que los siguientes enlaces son para CLR, pero siguen siendo relevantes para el desarrollo de Java). Ver especialmente: http://blogs.msdn.com/b/oldnewthing/archive/2010/08/09/10047586.aspx y http://blogs.msdn.com/b/oldnewthing/archive/2010/08/10/10 /10048150.aspx
Dicho esto, no hay mucha diferencia entre Java y C ++, y como señaló Chris, puede codificar en C / C ++ en Android usando el NDK.
fuente
Chris Pruett de Google habló sobre escribir juegos en tiempo real para Android en Google I / O 2009 y nuevamente en 2010 . Habla sobre el rendimiento de Java en Android, entre otros temas. También creó un juego, Replica Island , en Java y puedes descargar el código fuente para tener una idea de cómo podría ser un juego Android Java. Su blog sobre el juego también tiene varios artículos interesantes.
Las dificultades típicas son similares a las de escribir en otros lenguajes recolectados de basura , se usan grupos de objetos y se asignan las cosas por adelantado para evitar que el GC se ejecute cuando no se desea. Los métodos son virtuales de forma predeterminada en Java y ayuda a marcarlos como finales cuando no es necesario anularlos. El complemento Android Eclipse viene con algunas herramientas ordenadas para ayudarlo a perfilar su aplicación y monitorear las asignaciones de almacenamiento dinámico.
fuente
Te preocupas demasiado. La API para OpenGL en Android, OpenGL-ES, se mantuvo deliberadamente como C. Vea las especificaciones de OpenGL en http://www.khronos.org/opengles/ para más detalles.
Incluso es posible que no te pierdas mucho de C ++. Muchos desarrolladores, incluso el famoso autor de programación Bruce Eckel ('Pensar en C ++', 'Pensar en Java'), han encontrado que Java es un lenguaje mucho más efectivo para la programación orientada a objetos. En gran parte porque las cosas que 'perdieron' al principio resultaron no ser tan importantes después de todo.
Dicho esto, lo que más extraño es la capacidad de anular operadores, no solo métodos. La sintaxis es realmente más torpe cuando tienes que definir / anular métodos en lugar de operadores.
Considere, por ejemplo, la aritmética de números complejos. Es realmente elegante en C ++. No es así en Java. Pero esto resulta tener un impacto mínimo en la mayoría de los proyectos reales.
Algunas personas se quejan de la incapacidad de hacer herencia múltiple. Pero el tipo más útil de herencia múltiple ES el tipo que Java hace con la 'interfaz', por lo que realmente no se debe perder tanto.
fuente