美文网首页
ndk开发-4 引用类型

ndk开发-4 引用类型

作者: proud2008 | 来源:发表于2020-03-03 10:34 被阅读0次

    三种类型 global local Weak

    引用

        if (stringRerence == NULL) {
            jclass jclass1 = env->FindClass("java/lang/String");  //jclass1  为local引用  办法结束后释放 一个办法中定义的太多会报错的
            env->DeleteLocalRef(jclass1); /*释放jclass1 Local引用*/
    }
    

    global引用

    #include <jni.h>
    #include <string>
    #include <tgmath.h>
    #include "log.h"
    
    
    extern "C"
    JNIEXPORT void JNICALL
    Java_com_hrg_gys_clfr_myapplication_JniData_referenceDemo(JNIEnv *env, jclass clazz) {
        // TODO: implement referenceDemo()
        static jclass stringRerence = NULL;
        if (stringRerence == NULL) {
            jclass jclass1 = env->FindClass("java/lang/String");
            stringRerence = static_cast<jclass>(env->NewGlobalRef(jclass1)); /*创建Global引用*/
            env->DeleteLocalRef(jclass1); /*释放jclass1 Local引用*/
        } else {
            LOGD("used Canche");
        }
        /*使用stringRerence引用*/
        jmethodID jmethodId = env->GetMethodID(stringRerence, "<init>", "(Ljava/lang/String;)V");
        jstring jstring2 = env->NewStringUTF("java string");
        jstring jstring1 = static_cast<jstring>(env->NewObject(stringRerence, jmethodId, jstring2));
    
        const char *chars = env->GetStringUTFChars(jstring1, 0);
        LOGD("chars %s ", chars);
    }
    

    Weak引用

     stringRerence = static_cast<jclass>(env->NewWeakGlobalRef(jclass1)); /*创建Weak引用*/
     jboolean  jboolean1=env->IsSameObject(stringRerence , NULL); //判断 weak引入是否被释放
    

    相关文章

      网友评论

          本文标题:ndk开发-4 引用类型

          本文链接:https://www.haomeiwen.com/subject/igavkhtx.html