Androidの違い(Dalvik + JavaとOld School C ++)


8

Androidでの開発は、過去10年間をC ++でゲームのコーディングに費やしてきたため、私にとっては異なるでしょう。Android向けに開発する場合の主な違い/落とし穴/ボトルネックは何ですか?私の最大の心配はJavaへの移行です。最も見逃すものは何ですか。

より明確にするために、通常コンソール用にC ++をコーディングする方法と比較して、Javaですべてをコーディングした場合、何を見逃すでしょうか?


タイトルは少し良いかもしれません。明確にするために、「AndroidフォンのC ++とJavaの違いは何ですか?」
ジェシードーシー

6
NDK(developer.android.com/sdk/ndk/index.html)を使用すれば、ほとんどのコードをC ++で記述できると思います。
クリス・ハウ

回答:


6

おそらく見逃すであろう最大のことは、明示的なメモリ管理です。プラス面として、Javaには実行時の型情報と実際のジェネリックがあります。また、Javaコードの効率を維持する方法に関するGoogleのヒントについては、http//developer.android.com/guide/practices/design/performance.htmlを参照してください。

Raymond Chenは最近、CLRでのガベージコレクションとメモリ管理について熱心に取り組んでいます。彼のブログ投稿は、CLRのしくみを理解するのに最適です。(私は次のリンクがCLR用であることを知っていますが、それらはまだJava開発に関連しています)。特に:http : //blogs.msdn.com/b/oldnewthing/archive/2010/08/09/10047586.aspxおよび http://blogs.msdn.com/b/oldnewthing/archive/2010/08/10 /10048150.aspx

そうは言っても、JavaとC ++の間にそれほど大きな違いはなく、Chrisが指摘したように、NDKを使用してAndroidのC / C ++でコーディングできます。


「NDKを使用してAndroidのC / C ++でコーディングできます」と感謝します。そうですが、何かが実際にプロジェクトの改善/高速化につながるのであれば、なぜいつも古い銃を使い続けるのですか。
Richard Fabian

2
ああ、私はあなたが何をしているのかわかります。Javaには、XMLを処理するための大規模な標準ライブラリと非常に有能なライブラリがあるというボーナスがあります。Androidプラットフォームは、標準ライブラリを拡張し、豪華なハードウェアのすべての機能といくつかの追加のユーザー側機能のライブラリを備えています。Javaはインクリメンタルコンパイル/エラーチェックもサポートしているため、エラーを入力するとすぐにエラーに関するフィードバックが得られます。正直なところ、パフォーマンスを恐れるべきではありません。ベアメタルではCほど高速ではありませんが、それでもかなり高速です。心配することはあまりないと思います。
brett 2010

4

GoogleのChris Pruettが、Google I / O 2009で、そして2010 年にも、Android向けのリアルタイムゲームを書くことについて話しました。彼は他のトピックの中でもとりわけAndroidでのJavaパフォーマンスについて語っています。彼はまた、Javaでゲーム「レプリカアイランド」を作成しました。ソースコードをダウンロードして、Android Javaゲームがどのように見えるかを知ることができます。ゲームに関する彼のブログにも、いくつかの洞察に満ちた記事があります。

典型的な落とし穴は、他のガベージコレクションされた言語で書く場合と似ています。事前にオブジェクトプールを使用し、必要なものを割り当てて、不要なときにGCが実行されないようにします。メソッドは、Javaではデフォルトで仮想であり、オーバーライドする必要がない場合は、メソッドをfinalとしてマークすると役立ちます。Android Eclipseプラグインには、アプリケーションのプロファイルとヒープ割り当ての監視に役立つ便利なツールが付属しています。


2

心配しすぎです。AndroidのOpenGL用API、OpenGL-ESは、意図的にCのように保たれました。詳細については、http: //www.khronos.org/opengles/のOpenGL仕様を参照してください。

C ++からほとんど何も見逃さない可能性さえあります。多くの開発者、有名なプログラミング作家であるBruce Eckel(「Thinking in C ++」、「Thinking in Java」)でさえ、Javaはオブジェクト指向プログラミングにとってはるかに効果的な言語であることがわかりました。主に彼らが最初に「逃した」ことは結局それほど重要ではないことが判明したからです。

そうは言っても、私が最も見逃しているのは、メソッドだけでなく、演算子をオーバーライドする機能です。演算子の代わりにメソッドを定義/オーバーライドする必要がある場合、構文は本当に扱いにくくなります。

たとえば、複素数の算術について考えてみましょう。C ++では本当にエレガントです。Javaではそうではありません。しかし、これはほとんどの実際のプロジェクトへの影響が最小限であることがわかりました。

多重継承ができないことに不満を言う人もいます。しかし、最も有用な種類の多重継承は、Javaが「インターフェース」で行う種類なので、それほど見逃してはなりません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.