O desenvolvimento no Android será diferente para mim, tendo passado os últimos 10 anos codificando jogos em C ++. Quais são as principais diferenças / armadilhas / gargalos no desenvolvimento para o Android? Minha grande preocupação é mudar para Java, do que vou sentir mais falta?
Para ser mais claro: do que eu sentiria falta se codificasse tudo em Java em comparação com a maneira como normalmente codifico C ++ para consoles?
Respostas:
A maior coisa que você provavelmente sentiria falta seria o gerenciamento explícito da memória. No lado positivo, Java possui informações sobre o tipo de tempo de execução e genéricos reais. Consulte também: http://developer.android.com/guide/practices/design/performance.html para obter algumas dicas do Google sobre como manter seu código Java eficiente.
Raymond Chen recentemente falou sobre a coleta de lixo e o gerenciamento de memória no CLR, e seus posts no blog são ótimos para entender como ele funciona. (Eu sei que os seguintes links são para o CLR, mas ainda são relevantes para o desenvolvimento Java). Veja especialmente: http://blogs.msdn.com/b/oldnewthing/archive/2010/08/09/10047586.aspx e http://blogs.msdn.com/b/oldnewthing/archive/2010/08/10 /10048150.aspx
Dito isto, não há muita diferença entre Java e C ++ e, como Chris apontou, você pode codificar em C / C ++ no Android usando o NDK.
fonte
Chris Pruett, do Google, falou sobre a criação de jogos em tempo real para Android no Google I / O 2009 e novamente em 2010 . Ele fala sobre o desempenho do Java no Android, entre outros tópicos. Ele também criou um jogo, Replica Island , em Java e você pode fazer o download do código-fonte para ter uma idéia de como um jogo Java Android pode parecer. Seu blog sobre o jogo também possui vários artigos interessantes.
As armadilhas típicas são semelhantes às de escrever em outras linguagens de coleta de lixo , você usa um pool de objetos e aloca as coisas com antecedência para evitar que o GC seja executado quando você não deseja. Os métodos são virtuais por padrão em Java e ajuda a marcá-los como finais quando você não precisa substituí-los. O plug-in do Android Eclipse vem com algumas ferramentas legais para ajudá-lo a criar um perfil do seu aplicativo e monitorar as alocações de heap.
fonte
Você está se preocupando demais. A API para OpenGL no Android, OpenGL-ES, foi deliberadamente mantida como C. Veja as especificações do OpenGL em http://www.khronos.org/opengles/ para obter detalhes.
É até possível que você não perca muito do C ++. Muitos desenvolvedores, mesmo o famoso autor de programação Bruce Eckel ('Thinking in C ++', 'Thinking in Java'), consideraram o Java uma linguagem muito mais eficaz para a programação orientada a objetos. Em grande parte porque as coisas que eles “perderam” a princípio acabaram não sendo tão importantes, afinal.
Dito isto, o que mais sinto falta é a capacidade de substituir operadores, não apenas métodos. A sintaxe é realmente mais desajeitada quando você precisa definir / substituir métodos em vez de operadores.
Considere, por exemplo, aritmética de números complexos. É realmente elegante em C ++. Não é assim em Java. Mas isso acaba tendo um impacto mínimo na maioria dos projetos reais.
Algumas pessoas reclamam da incapacidade de fazer herança múltipla. Mas o tipo mais útil de herança múltipla É o tipo que Java faz com a 'interface', então você não deve perder muito.
fonte