美文网首页
保持对JNIEnv环境的全局引用

保持对JNIEnv环境的全局引用

作者: 海内灬存知己 | 来源:发表于2022-11-25 21:29 被阅读0次

    1:可以做的是改为缓存JavaVM指针。

    static JavaVM *jvm;
    
    [JNICALL etc] void init(JNIENv* env, [etc])
    {
       jint rs = (*env)->GetJavaVM(env, &jvm);
       [assert](http://www.opengroup.org/onlinepubs/009695399/functions/assert.html) (rs == JNI_OK);
    }
    
    

    2:在没有给它的上下文中使用JNIEnv指针,请执行以下操作:

    void someCallback() {
        JNIEnv *env;
        jint rs = (*jvm)->AttachCurrentThread(jvm, &env, NULL);
        [assert](http://www.opengroup.org/onlinepubs/009695399/functions/assert.html) (rs == JNI_OK);
        //找到接口类
        jclass jSdkClass = env->GetObjectClass(myTest);
        //找到接口类方法,第三个参数是方法签名
        jmethodID javaCallback = env->GetMethodID(jSdkClass, "getX", "(Z)V");
        //进行回调
        env->CallVoidMethod(myTest, javaCallback, true);
    }
    

    相关文章

      网友评论

          本文标题:保持对JNIEnv环境的全局引用

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