私は最近、Android JNI アプリケーションで API レベル 14 をターゲットにし始めましたが、ここで説明されている問題をすぐに発見しました。
ローカル参照を明示的に管理しても問題を解決できなかったので (私の実験の最後にローカル参照テーブルのオーバーフローが発生しました)、単純にグローバル参照に切り替えることにしました。現在、その記事に記載されていない「古いグローバル参照を使用しようとする」問題が発生しています。
これが私がやろうとしていることです: jobject
s のコンテナーを持つ単一のオブジェクトがあります。Java がネイティブ メソッドを呼び出し、後で使用するために保存する必要がある参照を渡すたびに、その参照に新しいグローバル ref を作成jobject
し、コンテナーにグローバル ref を追加して、そのインデックスも保存します。を使用する必要があるときはいつでもjobject
、インデックスで取得します。このアプローチの問題は何ですか?
PS JNIメソッドを呼び出すときはいつでもJNIEnv
、呼び出し元のスレッドに正しいものを使用しています。JNI 呼び出しを行うスレッドは JVM に接続されます。