美文网首页
保持对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