Développer sur Android va être différent pour moi, après avoir passé les 10 dernières années à coder des jeux en C ++. Quelles sont les principales différences / pièges / goulots d'étranglement à développer pour Android? Ma grande inquiétude est de passer à Java, que vais-je manquer le plus?
Pour être plus clair: que manquerais-je si je codais le tout en Java par rapport à la façon dont je code normalement C ++ pour les consoles?
Réponses:
La principale chose que vous manqueriez probablement serait la gestion explicite de la mémoire. Du côté positif, Java a des informations de type d'exécution et de vrais génériques. Voir également: http://developer.android.com/guide/practices/design/performance.html pour quelques conseils de Google sur la façon de garder votre code Java efficace.
Raymond Chen a récemment évoqué la collecte des ordures et la gestion de la mémoire dans le CLR et ses articles de blog sont excellents pour comprendre comment cela fonctionne. (Je sais que les liens suivants sont pour le CLR, mais ils sont toujours pertinents pour le développement Java). Voir en particulier: http://blogs.msdn.com/b/oldnewthing/archive/2010/08/09/10047586.aspx et http://blogs.msdn.com/b/oldnewthing/archive/2010/08/10 /10048150.aspx
Cela étant dit, il n'y a pas beaucoup de différence entre Java et C ++, et comme Chris l'a souligné, vous pouvez coder en C / C ++ sur Android à l'aide du NDK.
la source
Chris Pruett de Google a parlé de l'écriture de jeux en temps réel pour Android dans Google I / O 2009 et à nouveau en 2010 . Il parle entre autres des performances Java sur Android. Il a également créé un jeu, Replica Island , en Java et vous pouvez télécharger le code source pour avoir une idée de l'apparence d'un jeu Java Android. Son blog sur le jeu contient également plusieurs articles perspicaces.
Les pièges typiques sont similaires à ceux de l'écriture dans d'autres langages récupérés , vous utilisez un pool d'objets et allouez des choses à l'avance pour éviter d'avoir le GC exécuté lorsque vous ne le souhaitez pas. Les méthodes sont virtuelles par défaut en Java et il est utile de les marquer comme finales lorsque vous n'avez pas besoin de les remplacer. Le plugin Android Eclipse est livré avec quelques outils pratiques pour vous aider à profiler votre application et à surveiller les allocations de tas.
la source
Vous vous inquiétez trop. L'API pour OpenGL dans Android, OpenGL-ES, a été délibérément conservée en C. Voir les spécifications OpenGL sur http://www.khronos.org/opengles/ pour plus de détails.
Il est même possible que vous ne manquiez pas grand-chose de C ++. De nombreux développeurs, même le célèbre auteur de programmation Bruce Eckel («Penser en C ++», «Penser en Java»), ont trouvé Java un langage beaucoup plus efficace pour la programmation orientée objet. En grande partie parce que les choses qu'ils ont «manquées» au début se sont avérées ne pas être si importantes après tout.
Cela dit, ce qui me manque le plus, c'est la possibilité de remplacer les opérateurs, pas seulement les méthodes. La syntaxe est vraiment plus maladroite lorsque vous devez définir / remplacer des méthodes au lieu d'opérateurs.
Considérons, par exemple, l'arithmétique des nombres complexes. Il est vraiment élégant en C ++. Ce n'est pas le cas en Java. Mais cela s'avère avoir un impact minimal sur la plupart des projets réels.
Certaines personnes se plaignent de l'incapacité de faire l'héritage multiple. Mais le type d'héritage multiple le plus utile est celui que Java fait avec l '«interface», donc vous ne devriez pas vraiment le manquer autant.
la source