しばらくの間、NDK 側で java.nio.ByteBuffers を使用してきました - Android と JNI、GC、および ICS の将来との関係に関するこの記事に気づきました。ここの記事http://android-developers.blogspot.com/2011/11/jni-local-reference-changes-in-ics.html
だから...ここに懸念があります:
JNI が提供する「ポインター」は、実際には JNI 内部で管理される参照であるように見えるため、渡される前に JNI メソッドで NewGlobalReference() としてマークされていない場合、ある時点で GC によって「移動」または削除される可能性があります。 C++ クラスに?
私の JNI メソッドでは、ダイレクト バッファ アドレスを取得し、それを使用するクラスに渡します。
env->NewGlobalRef(jobject);
env->NewLocalRef(jobject);
env->DeleteGlobalRef(jobject);
管理。
今のところすべて動作しますが、正しいですか?
考え?
PS - C++ の終了/デストラクタで free(ByteBuffer) を使用します