Die Entwicklung in Android wird für mich anders sein, da ich in den letzten 10 Jahren Spiele in C ++ programmiert habe. Was sind die Hauptunterschiede / Fallstricke / Engpässe bei der Entwicklung für Android? Meine große Sorge ist die Umstellung auf Java. Was werde ich am meisten vermissen?
Um es klarer zu machen: Was würde ich vermissen, wenn ich das Ganze in Java codieren würde, verglichen mit der Art, wie ich normalerweise C ++ für Konsolen codiere?
Antworten:
Die größte Sache, die Sie wahrscheinlich vermissen würden, wäre die explizite Speicherverwaltung. Auf der positiven Seite verfügt Java über Laufzeitinformationen und echte Generika. Unter: http://developer.android.com/guide/practices/design/performance.html finden Sie einige Tipps von Google, wie Sie Ihren Java-Code effizient halten können.
Raymond Chen hat sich kürzlich mit der Speicherbereinigung und Speicherverwaltung in der CLR befasst, und seine Blog-Beiträge sind hervorragend geeignet, um zu verstehen, wie dies funktioniert. (Ich weiß, dass die folgenden Links für die CLR gelten, aber sie sind immer noch für die Java-Entwicklung relevant.) Siehe insbesondere: http://blogs.msdn.com/b/oldnewthing/archive/2010/08/09/10047586.aspx und http://blogs.msdn.com/b/oldnewthing/archive/2010/08/10 /10048150.aspx
That being said, es gibt nicht so viel Unterschied zwischen Java und C ++, und als Chris wies darauf hin, Sie können Code in C / C ++ auf Android NDK verwenden.
quelle
Chris Pruett von Google sprach über das Schreiben von Echtzeitspielen für Android in Google I / O 2009 und 2010 . Er spricht unter anderem über die Java-Leistung unter Android. Er hat auch ein Spiel, Replica Island , in Java erstellt, und Sie können den Quellcode herunterladen , um eine Vorstellung davon zu bekommen, wie ein Android-Java-Spiel aussehen könnte. Sein Blog über das Spiel enthält auch mehrere aufschlussreiche Artikel.
Die typischen Fallstricke ähneln denen beim Schreiben in anderen Sprachen , in denen Müll gesammelt wird . Sie verwenden Objektpools und weisen Inhalte im Voraus zu, um zu vermeiden, dass der GC ausgeführt wird, wenn Sie dies nicht möchten. Methoden sind in Java standardmäßig virtuell und es ist hilfreich, sie als endgültig zu markieren, wenn Sie sie nicht überschreiben müssen. Das Android Eclipse-Plugin enthält einige nützliche Tools, mit denen Sie Ihre Anwendung profilieren und Heap-Zuordnungen überwachen können.
quelle
Sie machen sich zu viele Sorgen. Die API für OpenGL in Android, OpenGL-ES, wurde bewusst C-ähnlich gehalten. Weitere Informationen finden Sie in den OpenGL-Spezifikationen unter http://www.khronos.org/opengles/ .
Es ist sogar möglich, dass Sie von C ++ nicht viel verpassen. Viele Entwickler, sogar der berühmte Programmierautor Bruce Eckel ('Thinking in C ++', 'Thinking in Java'), haben festgestellt, dass Java eine viel effektivere Sprache für die objektorientierte Programmierung ist. Vor allem, weil sich herausstellte, dass die Dinge, die sie zunächst „verpasst“ hatten, doch nicht so wichtig waren.
Was ich jedoch am meisten vermisse, ist die Fähigkeit, Operatoren zu überschreiben, nicht nur Methoden. Die Syntax ist wirklich umständlicher, wenn Sie Methoden anstelle von Operatoren definieren / überschreiben müssen.
Betrachten Sie zum Beispiel komplexe Zahlenarithmetik. Es ist wirklich elegant in C ++. Nicht so in Java. Dies hat jedoch nur minimale Auswirkungen auf die meisten realen Projekte.
Einige Leute beschweren sich über die Unfähigkeit, Mehrfachvererbung durchzuführen. Die nützlichste Art der Mehrfachvererbung ist jedoch die Art, die Java mit der 'Schnittstelle' macht. Sie sollten sie also nicht so sehr verpassen.
quelle