グローバル変数、ローカル変数、および弱参照変数の生成と削除
jobject NewGlobalRef(jobject obj) 全局
jobject NewLocalRef(jobject obj) 局部
jobject new WeakGlobalRef(jobject obj) 弱引用
这个方法可以判断对象是否被回收
只需要把obj2变成NULL
jboolean IsSameObeject(jobject obj1, jobject jobj2)
ネイティブキャッシュ
1.静的な方法
// c++中的缓存方法
extern "C"
JNIEXPORT void JNICALL
Java_com_univer_androidyellowbook_JniDemo_cache(JNIEnv *env, jobject thiz) {
// 只被执行一次
static jfieldID fieldId_string = NULL;
jclass clazz = env->GetObjectClass(thiz);
if(fieldId_string == NULL){
fieldId_string = env->GetFieldID(clazz, "string", "Ljava/lang/String;");
}
}
2.グローバル変数の方法
// global variable
jfieldID g_propInt_id = 0;
jfieldID g_propStr_id = 0;
extern "C"
JNIEXPORT void JNICALL
Java_com_univer_androidyellowbook_JniDemo_initNative(JNIEnv *env, jclass clazz) {
// TODO: implement initNative()
g_propInt_id = env->GetFieldID(clazz, "propInt", "I");
g_propStr_id = env->GetFieldID(clazz, "propStr", "Ljava/lang/String;");
}
要約すると、主に2つのキャッシュ方法が導入されています。C++でのメモリリークの問題を考慮する必要がないため、開発中に不要なメモリオーバーヘッドを節約するためにキャッシュできるかどうかも考慮する必要があります。