博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android NDK对象的引用-全局引用,局部引用,弱引用
阅读量:6273 次
发布时间:2019-06-22

本文共 1526 字,大约阅读时间需要 5 分钟。

百度了一下,google了一下,关于NDK引用的介绍无10篇中就有9.9篇是相同的,对于这种问题,我只能呜呼哀哉了!! 局部引用(函数内部对象类型变量):在C或C++中,局部变量表示只运行范围局限在该变量最近的 “{}”花括号里,常见的就是函数中的变量了,但局部引用和局部变量不同了,引用的主体是对象,指针,因此,设涉及到内存回收问题。同局部变量一样,局部对象在函数执行完成后会被立即销毁。(错误的用法1:将局部引用赋值给全局引用或弱引用) (错误的用法 : 引用被静态缓存,这种方法十分危险,容易导致程序蹦退,但不是不可以,只是引用的主题必须不是对象才行,比如jfieldID,jmethodID等)JNIEXPORT void JNICALL Java_com_ndk_cjava_exchange_UserEntity_referenceUnit  (JNIEnv * env, jobject thiz)  {    static jfieldID nameField = NULL;    if(nameField==NULL)    {    nameField =  env->GetFieldID(clazz,"name","Ljava/lang/String;");    }    //do somthing} 全局引用(函数外部对象类型变量):全局引用表示把局部引用通过某种方式复制给全局对象,并且该变量不会自动销毁,需要手动销毁jclass globalJclazz = NULL;JNIEXPORT void JNICALL Java_com_ndk_cjava_exchange_UserEntity_referenceUnit  (JNIEnv * env, jobject thiz){    if(globalJclazz==NULL)    {        __android_log_print(ANDROID_LOG_INFO,"REF","--1-->");        globalJclazz = (jclass)(env->NewGlobalRef(env->GetObjectClass(thiz))); //转为全局引用    }else{        __android_log_print(ANDROID_LOG_INFO,"REF","--2-->");        env->DeleteGlobalRef(globalJclazz);        globalJclazz =NULL;    }} 弱引用:作用域同全局变量一样,但不能保证该引用一致从在,当内存不足时会自动销毁jclass weakclass = NULL;JNIEXPORT void JNICALL Java_com_ndk_cjava_exchange_UserEntity_referenceUnit  (JNIEnv * env, jobject thiz){    if(weakclass==NULL || (env->IsSameObject(weakclass,NULL))==JNI_TRUE)    {        jclass jclzz  = env->GetObjectClass(thiz);        weakclass = (jclass)(env->NewWeakGlobalRef(jclzz));    }else{        env->DeleteWeakGlobalRef(weakclass);        weakclass = NULL;    }}

 

转载地址:http://jzlpa.baihongyu.com/

你可能感兴趣的文章
非常好的Python学习资源收集整理
查看>>
java 图片等比压缩
查看>>
Oracle 创建普通用户,并赋予权限
查看>>
我的友情链接
查看>>
android工程目录结构,及相关文件获取方式(1)
查看>>
Vsftpd内网映射相关原理及配置
查看>>
Linux非对称路由
查看>>
在iOS 8中使用UIAlertController
查看>>
第2课:通过案例对SparkStreaming 透彻理解三板斧之二:解密SparkStreaming运行机制和架构...
查看>>
IOS开发—App 在 IOS 8 的simulator运行时,定位卡死bug解决
查看>>
windows 密钥登陆 linux
查看>>
IOS 录制视频
查看>>
limit检查
查看>>
Android Things 简介
查看>>
菜鸟学Linux 第049篇笔记 DNS log, zone, view
查看>>
菜鸟学Linux 第054篇笔记 建立加密的http
查看>>
ListView 的多选模式
查看>>
宏正自动科技发表新款8/16端口双滑轨LCD KVM多电脑切换器
查看>>
解决 Missing GL version
查看>>
VS 编译链接错误集锦
查看>>