参考:
http://blog.csdn.net/qiuchangyong/article/details/27222701
http://blog.csdn.net/lirunfa/article/details/8030094
C++里首先定义全局变量:
JavaVM* gs_jvm = nullptr;
然后在第一个java调用c++的函数里调用
env->GetJavaVM(&gs_jvm); //来获取JavaVM指针.获取了这个指针后,将该JavaVM保存起来。
static jclass cls = nullptr;
if( nullptr == cls ){
cls = env->FindClass( "com/abcd/efgg/sdfa");
cls = (jclass)env->NewGlobalRef(cls);//永久保存cls
}
最后随便任何一个线程里:
JNIEnv *env;
int status = gs_jvm->GetEnv( (void**)&env, JNI_VERSION_1_4 );
if(status < 0) {
//LOGD("callback_handler:failed to get JNI environment assuming native thread");
status = gs_jvm->AttachCurrentThread(&env, NULL);
if(status < 0) {
// LOGE("callback_handler: failed to attach current thread");
return;
}
}
然后就在这个线程里用这个env和上面永久保存的全局cls,做什么都可以了