全局变量,局部变量,弱引用变量的生成与删除
jobject NewGlobalRef(jobject obj) 全局
jobject NewLocalRef(jobject obj) 局部
jobject new WeakGlobalRef(jobject obj) 弱引用
这个方法可以判断对象是否被回收
只需要把obj2变成NULL
jboolean IsSameObeject(jobject obj1, jobject jobj2)
native的缓存方式
1.static的方式
// 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;");
}
总结,主要介绍了两种缓存方式,因为c++里没有需要考虑内存泄露的问题,所以我们在开发的时候也需要考虑是否能够缓存的方式去节约一些不必要的内存开销