2013-05-18 6 views
7

JNIメソッドからjstringを返します。値を返す前に、ローカル参照を削除します。JavaネイティブインタフェースでDeleteLocalRefを呼び出す

JNIEXPORT jstring JNICALL TestJNIMethod(JNIEnv* env, jclass) 
{ 
    jstring test_string = env->NewStringUTF("test_string_value"); 
    env->DeleteLocalRef(test_string); 
    return test_string; 
} 

呼び出し元のJavaメソッドは、返されたjstringに引き続きアクセスできますか、ガベージコレクタはメモリをクリーンアップしますか?

答えて

18

いいえ、あなたのコードはICSより前のAndroidバージョンでも動作します。このコードのICSからは正しく失敗します。

一般に、ローカル参照を自分で削除する必要はありません.JNI関数がJavaに戻ると、参照はGC'dになります。

多くの場合、おそらくループで作成する場合は例外です。次に、ローカル参照テーブルを満たすことができます。 IBM: Overview of JNI object referencesを参照してください。

JNI Local Reference Changes in ICSをお読みください。あなたがAndroid用に書いていないとしても、多くのよくある間違いがまだ分かっています。

関連する問題