Android Unterschiede (Dalvik + Java vs Old School C ++)

8

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?

Richard Fabian
quelle
Titel könnte etwas besser sein. Um ganz klar zu sein, fragen Sie: "Was ist der Unterschied zwischen C ++ und Java auf dem Android Phone?"
Jesse Dorsey
6
Ich denke, wenn Sie das NDK ( developer.android.com/sdk/ndk/index.html ) verwenden, können Sie den größten Teil Ihres Codes in C ++ schreiben.
Chris Howe

Antworten:

6

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.

brett
quelle
danke, "Sie können in C / C ++ auf Android mit dem NDK codieren", ja, das weiß ich zu schätzen, aber warum sollten Sie sich die ganze Zeit an alte Waffen halten, wenn sich herausstellt, dass Projekte tatsächlich besser / schneller sind.
Richard Fabian
2
Oh, ich verstehe, worauf du hinaus willst. Java hat den Vorteil, über eine umfangreiche Standardbibliothek und eine äußerst kompetente Bibliothek für den Umgang mit XML zu verfügen. Die Android-Plattform erweitert die Standardbibliothek um Bibliotheken für alle ausgefallenen Hardware-Extras und einige zusätzliche benutzerseitige Funktionen. Java unterstützt auch die inkrementelle Kompilierung / Fehlerprüfung, sodass Sie Feedback zu Fehlern erhalten, sobald Sie diese eingeben. Ehrlich gesagt sollten Sie auch keine Angst vor Leistung haben. Es wird nicht so schnell wie C auf Bare Metal sein, aber es ist immer noch ziemlich schnell. Ich würde sagen, dass es nicht viel zu befürchten gibt.
Brett
4

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.

Firas Assaad
quelle
2

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.

user1800
quelle