6

2年前、私はandroid-7(Eclair)で拡張現実フレームワークを開発しました。ARアプリケーションは計算量の多いタスクであるため、仮想環境をレンダリングおよび登録するためにJavaアクティビティで使用されるJNIc++ライブラリを開発しました。Javaで取得されたセンサーの読み取り値は、仮想環境の登録を計算するために下線付きのc++ライブラリに渡されます。3次元オブジェクトは、 GLSurfaceViewから呼び出されるネイティブの描画関数によってレンダリングされます。これにより、多くのJNI呼び出しが発生します。

ここで、アプリケーションをandroid-15(Ice Cream Sandwich)に移植したいと思います。android-9(Gingerbread)以降、AndroidではNativeActivityを使用できます

ARアプリケーションを開発するためのより良い方法を理解したいと思います。すべてのJNI呼び出しはオーバーヘッドをもたらすため、それらを回避する方がはるかに優れています。NativeActivityを使用することは可能ですか?NativeActivityがどのように機能するかを説明する詳細なガイドは見つかりませんでしたが、このドキュメントを読むと、とにかく多くのJNI呼び出しが発生するようです。NativeActivityがどのように機能するかを説明するアーキテクチャドキュメントはありますか?NativeActivityは、Javaコードを回避するための単なる「JNIラッパー」ですか?パフォーマンスに関して、以前のようにJNIライブラリの代わりにNativeActivityを使用する利点はありますか?

どうもありがとう。

4

2 に答える 2

5

NativeActivity は、フレームワークのパフォーマンスを向上させません。システムとの通信にはまだ JNI を使用していますが、隠れているだけです。

さらに、それを使用しない正当な理由があります。私があなたの目的を正しく理解しているなら、あなたは他のアプリケーションがあなたのコードを利用することを望んでいます. NativeActivity の使用を強制することで、彼らの自由を大幅に減らし、慣れていない環境で苦労することを要求します。NativeActivity には多くの制限があります。たとえば、複数の JNI ライブラリをロードすることはできません。

最後に、AR フレームワークの最適化を検討している場合は、まったく異なる方向性を提案します。新しいsetPreviewTexture() API を使用できます。

于 2012-11-29T16:15:09.860 に答える
0

私が理解している限り、NativeActivity を使用する場合も JNI にバインドされています。このクラスは出発点として使用でき、利便性のためにいくつかの機能をカプセル化しますが、ネイティブ コードにアクセスするための基盤となるテクノロジは変更されておらず、JNI のままです。したがって、私の意見では、NativeActivity が何らかの理由でより効率的であるかどうかを確認するために、いくつかのベンチマークしか実行できません (Google の担当者は、ソリューションよりも高速になるハックを知っている可能性があります)。

于 2012-11-29T11:40:28.413 に答える