保持对JNIEnv环境的全局引用

2022-11-25  本文已影响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);
}
上一篇 下一篇

猜你喜欢

热点阅读